2016-11-28 2 views
0

Elasticsearch bei Abfrage mit dem folgenden gibt keine Ergebnisse zurück.Elasticsearch query_string Suche mit Platzhalter verwenden

{ 
    "query":{ 
    "filtered":{ 
     "query":{ 
     "bool":{ 
      "should":[ 
      { 
       "query_string":{ 
       "query":"a*", 
       "analyze_wildcard":true 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Als ich "al *" anstelle von "a *" verwenden, erhalte ich die richtigen Ergebnisse. Dies geschieht nur für "a *". Wenn ich irgendwelche andere wie „b *“ verwenden oder „c *“ usw. sind die Ergebnisse richtige

I Elasticsearch Version 0.90.12

Antwort

0

Das ist mit, weil a ein Wort Anschlag ist und durch eliminiert wird der Standardanalysator, der Ihre Abfrage analysiert. Sie können dies wahrscheinlich umgehen, indem Sie einen anderen Analysator wie keyword anstelle des standard angeben. Eine andere Möglichkeit ist, analyze_wildcard auf false zu setzen.

{ 
    "query":{ 
    "filtered":{ 
     "query":{ 
     "bool":{ 
      "should":[ 
      { 
       "query_string":{ 
       "query":"a*", 
       "analyze_wildcard":true, 
       "analyzer": "keyword" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Vielen Dank für Ihre Antwort. Können Sie bitte erläutern, wie "a. *" In der obigen Abfrage sucht. Ich habe eine Aufzeichnung "A. J. Satya" und es wird nicht zurückgegeben, wenn mit "a. *" In der obigen Abfrage durchsucht wird. – tungri

+0

Das Problem ist, dass bei der Indizierung der Wert "A. J. Satya wird als Token 'j' und' satya' in Token umgewandelt, weil 'a' ein englisches Stoppwort ist und verworfen wird. Wahrscheinlich müssen Sie das Analysegerät, das Sie verwenden, auch zum Zeitpunkt der Indexierung ändern. – Val

+0

Danke für die Erklärung. – tungri

Verwandte Themen