Spring Data ElasticSearch - Problem

0

Cześć!

Postanowiłem, że postaram się stworzyć projekt - aplikację webową - w której użyje modułu wyszukiwarki umiejscowionej na stronie do przeszukiwania mojej bazy danych, a dokładnie tabelę składowanych Artykułów. Jako że korzystam ze spring data w projekcie, to założyłem że użyję silnika ElasticSearch do tego celu. Dodatkowo, w przyszłości chcę połączyć wyszukiwanie po tytułach wraz z wyszukiwaniem w tagach(tagi takie jak na przykład na tym forum)

Pierwszym, zasadniczym pytaniem jest: Czy jest to dobry wybór do tego typu modułu? A jeśli tak, to by nie tworzyć drugiego wątku przedstawie wam problem który mam z danym rozwiązaniem, mianowicie zapytanie mapowane w kontrolerze(przedstawione na końcu) zwraca mi JSONa z takim błędem:

"message": "None of the configured nodes are available: [{#transport#-1}{xzi23OqRRiyfmIs1jhxaow}{127.0.0.1}{127.0.0.1:9300}]"

A o to w jaki sposób i co dokładnie próbuje (przynajmniej w moim założeniu) uzyskać:
Za pomocą wpisania słowa kluczowego próbuję znaleźć tytuł artykułu w bazie danych, która takie słowo kluczowe posiada.

Moje wypociny w kodzie:

Klasa konfiguracyjna silnika ElasticSearch

public class EsConfig {

    @Value("${elasticsearch.home:/usr/local/Cellar/elasticsearch/5.6.0}")
    private String elasticsearchHome;

    @Value("${elasticsearch.cluster.name:elasticsearch}")
    private String clusterName;

    @Bean
    public Client client() {
        Settings elasticsearchSettings = Settings.builder()
                .put("client.transport.sniff", true)
                .put("path.home", elasticsearchHome)
                .put("cluster.name", clusterName).build();
        TransportClient client = new PreBuiltTransportClient(elasticsearchSettings);
        try {
            client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        }catch (UnknownHostException e){
            e.printStackTrace();
        }
        return client;
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchTemplate(client());
    }
}

Implementacja repozytorium rozszerzające standardowe repozytorium któro wygląda tak:

@Component
class ElasticSearchRepositoryImpl {
    EsConfig esConfig;

    ElasticSearchRepositoryImpl(EsConfig esConfig){
        this.esConfig=esConfig;
    }

    List<Article> findArticleByKeyWord(String whereToSearch,String whatToSearch) {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withFilter(regexpQuery(whereToSearch, ".*" + whatToSearch + "*."))
                .build();
        ElasticsearchOperations elasticsearchOperations = esConfig.elasticsearchTemplate();

        return elasticsearchOperations.queryForList(searchQuery, Article.class);
    }


}

Metoda ta odbierana jest przez prostą fasadę, która następnie pobierana jest w metodzie kontrolera:

@GetMapping(value = "/search/{keyWord}")
    ResponseEntity getArticlesByTitleKeyWord(@PathVariable(value = "keyWord")String keyWord) {
        return new ResponseEntity<>(searchFacade.searchArticlesByKeyWord("title",keyWord),HttpStatus.OK);
    }

Z góry dzięki za pomoc!

0

A odpaliłeś tego elastica?

0

tak, zapomniałem tu w poście dorzucić adnotacji które miałem w kodzie nad klasą konfiguracyjną:

@Configuration
@EnableElasticsearchRepositories(basePackages = "com.ithub.app.article.search")
@ComponentScan(basePackages = { "com.ithub.app.article" })
0

Adnotacja Springowa odpala ci elasticsearcha na maszynie? Az tak daleko to jeszcze chyba nie zaszlo :/

0

Ach rozumiem, jakoś byłem przekonany że wystarczy go wrzucić jako dependency do maven'a i będzie działać. To od razu zapytam, czy masz może pomysł na jakieś inne rozwiązanie, stricte w javie? Lepiej samemu napisać komunikację z bazą danych i to oprogramować, lub może istnieje już jakaś sensowna biblioteka?

2

Której bazy danych byś nie wybrał, musisz ją uruchomić żeby działała :| potem do połączenia się z nią i wykonywania operacji juz te zależności mavenowe się przydadzą. Baza danych to osobny byt niż Twoja aplikacja

1

Jeśli uruchomiłeś lokalnie elasticsearcha to spróbuj wbić na przeglądarce w adres http://localhost:9200/ powinieneś coś tam zobaczyć. Jak będziemy mieć pewność, że działa Ci elastic lokalnie to będzie można myśleć co dalej ;)

0

Dzięki Panowie, lecz po namyśle postanowiłem że przerzucę się na Hibernate Search, więc obecnie nie było tematu. Mimo wszystko dzięki za chęć pomocy!

1 użytkowników online, w tym zalogowanych: 0, gości: 1