8

Używam elasticsearch do filtrowania i wyszukiwania z pliku json i jestem początkującym w tej technologii. Tak więc jestem trochę zdezorientowany, jak pisać jak zapytanie w elastycznym wyszukiwaniu.Podobnie jak w przypadku wyszukiwania w Elasticsearch

select * from table_name where 'field_name' like 'a%' 

To jest zapytanie mysql. Jak napisać to zapytanie w Elasticsearch? Używam elasticsearch w wersji 0.90.7.

+0

0.90.7 jest bardzo (bardzo) starą wersją ES. Proponuję użyć najnowszej wersji. –

+1

Należy również zapoznać się z [dokumentacją] (https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-matching.html)! Obejmuje wiele przypadków użycia i oferuje różne rozwiązania tego, czego potrzebujesz. –

Odpowiedz

16

Gorąco sugerujemy uaktualnienie wersja ElasticSearch jeśli to możliwe, nie było istotnych zmian od 0.9.x.

To pytanie nie jest wystarczająco szczegółowe, ponieważ ElasticSearch może spełniać wiele funkcji, które różnią się nieznacznie od ogólnego celu. Jeśli chcesz dokładnie powielić to zapytanie SQL, w tym przypadku użyj kwerendy lub kwerendy z symbolem wieloznacznym.

Korzystanie wildcard zapytanie:

UWAGA: Należy uważać z wyszukiwań wieloznacznych, są powolne. Unikaj używania symboli wieloznacznych na początku strun.

GET /my_index/table_name/_search 
{ 
    "query": { 
     "wildcard": { 
      "field_name": "a*" 
     } 
    } 
} 

Albo Prefix query

GET /my_index/table_name/_search 
{ 
    "query": { 
     "prefix": { 
      "field_name": "a" 
     } 
    } 
} 

Albo partial matching:

Uwaga: NIE ślepo stosować częściowe dopasowanie, natomiast istnieją przypadki narożne dla jego wykorzystania, prawidłowe użycie analizatorów jest prawie zawsze lepszy.

Również to dokładne zapytanie będzie równoznaczne z LIKE '%a%', co może być lepszym rozwiązaniem przy użyciu mapowania i normalnego wyszukiwania zapytań!

GET /my_index/table_name/_search 
{ 
    "query": { 
     "match_phrase": { 
      "field_name": "a" 
     } 
    } 
} 

Jeśli czytasz ten zastanawiać zapytań ES podobnie do szukania-as-you-type Sugerowałbym czytania na edge-ngrams, które odnoszą się do właściwego korzystania z mapowania w zależności od tego, co próbują zrobić =)

1
GET /indexName/table_name/_search 
{ 
    "query": { 
     "match_phrase": { 
      "field_name": "your partial text" 
     } 
    } 
} 

Można użyć "type" : "phrase_prefix" poprzedzający lub po naprawić szukać kodu Java dla tego samego:

AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter(); 
andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name", 
      "your partial text"))); 

Dał „i” filtru przykład tak, że można dołączyć dodatkowe filtry, jeśli chcesz. Sprawdź to dla bardziej szczegółowo:

https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html

+0

dlaczego upadek? czego szukasz –

Powiązane problemy