8

Ich benutze Elasticsearch zum Filtern und Suchen von JSON-Datei und ich bin Neuling in dieser Technologie. Ich bin also ein wenig verwirrt, wie man in elasticsearch wie eine Suchanfrage schreibt.Ich suche in Elasticsearch

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

Dies ist MySQL-Abfrage. Wie schreibe ich diese Abfrage in Elasticsearch? Ich verwende elasticsearch Version 0.90.7.

+0

0,90.7 ist eine sehr (sehr) alte Version von ES. Ich schlage vor, die neueste Version zu verwenden. –

+1

Bitte lesen Sie auch die [Dokumentation] (https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-matching.html)! Es deckt viele Anwendungsfälle ab und bietet verschiedene Lösungen für das, was Sie brauchen. –

Antwort

16

Ich würde sehr empfehlen, Ihre Elasticsearch Version, wenn möglich, zu aktualisieren, es seit 0.9.x. wesentliche Änderungen

Diese Frage ist nicht spezifisch genug, da es viele Möglichkeiten gibt, wie ElasticSearch diese Funktionalität erfüllen kann, und sie unterscheiden sich geringfügig von Ihrem Gesamtziel. Wenn Sie versuchen, diese SQL-Abfrage genau zu replizieren, dann verwenden Sie in diesem Fall die Wildcard-Abfrage oder die Präfix-Abfrage.

Mit einer wildcard Abfrage:

Hinweis: mit Wildcard Durchsuchungen Seien Sie vorsichtig, sie sind langsam. Vermeiden Sie die Verwendung von Platzhaltern am Anfang der Zeichenfolgen.

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

Oder Prefix query

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

Oder partial matching:

Hinweis: Sie NICHT blind Teilübereinstimmung verwenden, während es Ecke Fälle sind, die Nutzung, die richtige Verwendung von Analysatoren ist fast immer besser.

Auch diese genaue Abfrage entspricht LIKE '%a%', die wiederum mit der richtigen Verwendung von Mapping und einer normalen Abfrage-Suche besser eingerichtet werden könnte!

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

Wenn Sie diese fragen, lesen über ES in ähnlicher Weise für Suche-as-you-type Abfrage würde ich vorschlagen, auf edge-ngrams Lesen auf, die auf die ordnungsgemäße Verwendung der Abbildung beziehen sich je nachdem, was Sie zu tun versuchen =)

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

können Sie "type" : "phrase_prefix" verwenden, um das Präfix oder senden Sie beheben Sie Java-Code für den gleichen suchen:

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

Gave ‚und Filter‘ Beispiel so, dass Sie zusätzliche Filter anfügen können, wenn Sie wollen. Aktivieren Sie diese für weitere Informationen:

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

+0

Warum der Downvote? Wonach suchen Sie –

Verwandte Themen