2017-07-21 3 views
0

Jetzt weiß ich, dass Schlüsselwort nicht unstrukturierten Text umfassen soll, aber sagen wir, dass es aus irgendeinem Grund einfach so passiert ist, dass solcher Text in Keyword-Feld geschrieben wurde. Bei der Suche nach solchen Dokumenten mit Match- oder Termabfragen wird das Dokument nicht gefunden, aber bei der Suche mit query_string wird das Dokument durch eine teilweise Übereinstimmung gefunden (ein "term" innerhalb des Schlüsselworts). Ich verstehe nicht, wie dies möglich ist, wenn in der Dokumentation von Elasticsearch eindeutig angegeben wird, dass das Schlüsselwort invers indexiert wird, ohne dass die Begriffe in Token umgewandelt werden. Beispiel: Meine Indexabbildung:Elasticsearch query_string Suche komplexes Schlüsselwort nach seinen Begriffen

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "full_text": { 
      "type": "text" 
     }, 
     "exact_value": { 
      "type": "keyword" 
     } 
     } 
    } 
    } 
} 

Dann habe ich ein Dokument in:

PUT my_index/my_type/2 
{ 
    "full_text": "full text search", 
    "exact_value": "i want to find this trololo!" 
} 

Und meine Überraschung vorstellen, als ich ein Dokument nach Stichwort Begriff bekommen, keine vollständige Übereinstimmung:

GET my_index/my_type/_search 
{ 
    "query": { 
    "match": { 
     "exact_value": "trololo" 
    } 
    } 
} 

- kein Ergebnis;

GET my_index/my_type/_search 
{ 
    "query": { 
    "term": { 
     "exact_value": "trololo" 
    } 
    } 
} 

- kein Ergebnis;

POST my_index/_search 
{"query":{"query_string":{"query":"trololo"}}} 

- mein Dokument zurückgegeben:

 "hits": { 
     "total": 1, 
     "max_score": 0.27233246, 
     "hits": [ 
     { 
      "_index": "my_index", 
      "_type": "my_type", 
      "_id": "2", 
      "_score": 0.27233246, 
      "_source": { 
       "full_text": "full text search", 
       "exact_value": "i want to find this trololo!" 
      } 
     } 
     ] 
    } 

Antwort

2

, wenn Sie tun, um eine query_string Abfrage elastisch wie unten

POST index/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "trololo" 
     } 
    } 
} 

Dies tut eigentlich eine Suche auf _all Feld der if (!) Sie nicht erwähnen, durch Standard-Analysator in elastisch analysiert werden.

Wenn Sie das Feld in der Abfrage wie folgt angeben, erhalten Sie keine Datensätze für das Schlüsselwortfeld.

POST my_index/_search 
{ 
    "query": { 
    "query_string": { 
     "default_field": "exact_value", 
     "query": "field" 
    } 
    } 
} 
+0

das macht Sinn. Sicher, ich kenne jedes Feld, ich hatte einfach nicht genug praktische Erfahrung, seit wir vor kurzem mit der Untersuchung von Elastic Stack angefangen haben und es nicht geschafft habe, alles zusammen zu stellen. Vielen Dank! – yuranos87

Verwandte Themen