2013-11-26 11 views
8

Jestem nowy w ElasticSearch i chciałbym móc wykonać zapytanie względem indeksu, który następnie wykorzystuje część wyniku, aby wykonać inne zapytanie.Jak wykonać "sprzężenie"/"pod-zapytanie" za pomocą ElasticSearch?

Na przykład, mamy indeks tags, który możemy wyszukać pasujący tag. Indeks zawiera przechowywane pola identyfikujące treść, z którą jest powiązany (podłączony). Każdy typ treści ma własny indeks. Muszę mieć możliwość wysłania zapytania o dopasowanie tagu i zwrócenia mu nie tylko wyniku tagu, ale także pola zapisanego (w tym przypadku title) z treści, z którą jest powiązany (inny indeks).

+0

Czy możemy użyć złącza ElasticSearch Hive, aby wykonać operację JOIN z Hive w magazynie danych ElasticSearch? - https://github.com/elastic/elasticsearch-hadoop – sumanth232

+0

Możliwy duplikat zapytania [Elastic Search i "sub zapytania"] (http://stackoverflow.com/questions/8808832/elastic-search-and-sub-queries) – Ankur

Odpowiedz

5

Miałem do czynienia z podobnym problemem. Potrzebujesz połączenia tutaj. Zespół Elasticsearch zaleca korzystanie ze strony aplikacji. ES emuluje relacyjną bazą danych poprzez wdrożenie łączy w naszej aplikacji: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/application-joins.html Więc można użyć dowolnego klienta ES i napisać coś podobnego

SearchResponse response = client.prepareSearch(scriptVersionFirst) 
        .setTypes("yourtype") 
        .setQuery(QueryBuilders.termQuery("multi", "test")) 
        .setFrom(0).setSize(60).setExplain(true) 
        .execute() 
        .actionGet(); 

    if (response != null) { 
     SearchHits hitList = response.getHits(); 
     if (hitList != null) { 
      SearchHit[] hits = hitList.hits();   
      for (SearchHit hit : hits) 
       MethodPojo source = gson.fromJson(hit.getSourceAsString(), MethodPojo.class); 
       System.out.println("Found: " + getMethodResultEntity(scriptVersionSecond, hit.getType(), source.getMethodName(), source.getMethodDesc(), source.getRequest())); 
      } 
     }

Tutaj funkcja return result getMethodResultEntity innych zapytaniu GET.

P.S. Używam tutaj klienta ES java. Jest trochę ciężki. Jeśli potrzebujesz klienta java, lepiej jest użyć klienta - dużo lekkiej wersji dla prostej sytuacji.

+0

Zastanawiam się, czy istnieje sposób, aby poprosić o elastyczne wyszukiwanie, aby zwrócić sprzężenie. Jeśli spojrzysz na http://www.elastic.co/guide/en/elasticsearch/guide/master/parent-child.html, stwierdzą one, że "dokumenty podrzędne mogą być zwracane jako wyniki zapytania o wyszukiwanie". –

+0

Czy możemy użyć złącza ElasticSearch Hive, aby wykonać operację JOIN z Hive w magazynie danych ElasticSearch? - https://github.com/elastic/elasticsearch-hadoop – sumanth232

Powiązane problemy