2016-03-30 17 views
0

Nach meinem Index in Elasticsearch mit den nächsten Standardeinstellung erstellen:Elasticsearch Abfrage Probleme

{ "autosuggest_destination": { 
     "aliases": {}, 
     "mappings": { 
     "destination": { 
      "properties": { 
       "city": { 
        "type": "string" 
       }, 
       "country": { 
        "type": "string" 
       }, 
       "id": { 
        "type": "string" 
       }, 
       "state": { 
        "type": "string" 
       } 
      } 
     } 
     }, 
     "settings": { 
     "index": { 
      "creation_date": "1459329252404", 
      "number_of_shards": "1", 
      "number_of_replicas": "0", 
      "version": { 
       "created": "1070299" 
      }, 
      "uuid": "_1D7ZW0dQwy9kiKn0kKrLw" 
     } 
     }, 
     "warmers": {} } } 

nach Einsatzdaten zu indizieren und verifiziert.

ich dieses Problem bekommen, während für ein Auto-Vervollständigen-Wort zu suchen versuchen:

, wenn ich versuche zu suchen ‚neuer‘ es gründet matches (New York). aber wenn ich versucht, ein Leerzeichen und einen ersten Buchstaben nach 'new y' hinzuzufügen, wird nichts gefunden. und nachdem es versucht, ein Leerzeichen und zwei Buchstaben nach "neuen yo" hinzuzufügen, funktioniert es.

Das Hauptproblem ist zu verstehen, warum der erste Buchstabe nach einem Wort mit ein Leerzeichen ist keine Übereinstimmung?

Beispiel:

GET autosuggest_destination/destination/_search { "query": { 
     "match": { 
      "city": { 
      "query": "new", 
      "type": "phrase_prefix" 
      } 

      } } 

    Result : New York 


    GET autosuggest_destination/destination/_search { "query": { 
     "match": { 
      "city": { 
      "query": "new y", 
      "type": "phrase_prefix" 
      } 

      } } 

    No Result 

    GET autosuggest_destination/destination/_search { "query": { 
     "match": { 
      "city": { 
      "query": "new yo", 
      "type": "phrase_prefix" 
      } 

      } } 

Result : New York 

Hat jemand eine Ahnung, was das Problem sein sollte?

Antwort

0


Elasticsearch bei Indizierung ein Dokument eines Analyzer verwendet (eine Standard oder einen benutzerdefinierten eins), wenn Sie sich für einige Werte suchen teilt sie das Dokument in den Bedingungen und dann wird es die passende macht mit dem, was Sie suchen wollten.
In Ihrem Beispiel: New York wird analysiert mit dem Standard-Analyzer stattfindet und es wird Ihr Dokument in 2 Begriffe New, York.
Wenn Sie nach Neu suchen, finden Sie den ersten Begriff New, so wird es Ihnen die Antwort New York geben. Wenn Sie nach Neuem Y suchen, wird die Suche in zwei Begriffe unterteilt: Neu, Y oder Neu, Yo und es wird versucht, Dokumente zu finden, die diesen zwei Begriffen entsprechen. Das Problem, auf das Sie stoßen, kann von max_expansions param sein.
Schauen Sie hier http://elasticsearch-users.115913.n3.nabble.com/How-exactly-works-quot-max-expansions-quot-in-match-phrase-prefix-query-td4030146.html Auch in Bezug auf den Analysator.

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html

+0

Thx, Es behebt das Problem, aber sollten die max_expansions so groß wie die Elemente zählen, um ein vorsichtiges Ergebnis zu erhalten? –

+0

Haben Sie versucht, eine Übereinstimmung mit der Unschärfe zu finden? https://www.elastic.co/guide/en/elasticsearch/guide/current/fuzzy-match-query.html – mariobyn

0

Wenn ich Teilwort wie "ork", um abzufragen (Ergebnis execpted: New York) möchte dann gibt es keine Treffer. Ich war auf der Suche nach Leitfaden in der Dokumentation und alles, was ich finden konnte, ist die Abfrage zu einem Platzhalter ändern, die mir erlauben wird, das zu tun. Aber ich möchte phrase_prefix mit nur einer Fähigkeit, über partielle Wort auch zu suchen. Ist das möglich?