我的索引可以说我有一个名为“full_name”的字段。我在做以下查询:
{
"query":{
"bool":{
"must":[
{
"wildcard":{
"full_name":"ab*"
}
}
]
}
},
"size":50
}
并且它返回完全适合的值,例如:
"full_name" : "abrakadabra"
但是我也收到这样的事情:
"full_name" : "kad abra"
Wildacrd“ab *”适合单词“abra”,因此我具有“full_name”:“kad abra”。如何避免这种情况,仅搜索第一个单词的前缀?
最佳答案
默认情况下应用于字符串的标准分析器为每个单词生成一个术语。因此,“kad abra”被索引为两个术语“kad”和“abra”,您的查询将找到第二个术语。如果要始终以短语搜索full_name,则应使用带有关键字标记器和小写过滤器的自定义分析器对其进行索引。另外,如果大小写对您有意义,则可以将该字段索引为not_analyzed。
关于lucene - elasticsearch奇怪的行为,寻找整个词组的前缀,但每个单词都有前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009814/