2016-11-28 52 views
0

Elasticsearch在查詢時使用以下方式返回無結果。Elasticsearch使用通配符進行query_string搜索

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

當我使用 「人*」 代替 「A *」,我得到正確的結果。這隻發生在「a *」上。當我使用的任何其他人一樣「B *」或「c *」等的結果是正確的

我使用elasticsearch版本0.90.12

回答

0

這是因爲a是停止字,並得到通過淘汰分析您的查詢的標準分析器。你可以通過指定一個不同的分析器來解決這個問題,比如keyword而不是使用standard。另一種選擇是將analyze_wildcard設置爲false

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

感謝您的回覆。你能解釋一下上面查詢中的「a。*」是如何搜索的。我有一個記錄「A.J. Satya」,並且在上面的查詢中使用「a。*」進行搜索時不會返回。 – tungri

+0

問題是在索引時間值'A. J. Satya'會被標記爲標記'j'和'satya',因爲'a'是一個英語停用詞並被丟棄。您可能還需要在索引時間更改您使用的分析儀。 – Val

+0

感謝您的解釋。 – tungri

相關問題