2016-11-28 51 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

相关问题