elasticsearch奇怪的行为,寻找整个短语的前缀,但每个单词都有前缀

时间:2012-04-04 11:03:45

标签: lucene elasticsearch

我的索引让我说我有一个名为“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”。如何避免它,并仅搜索第一个单词前缀?

1 个答案:

答案 0 :(得分:3)

标准分析器默认应用于字符串,为每个单词生成一个术语。因此,“kad abra”被索引为两个术语“kad”和“abra”,并且您的查询找到第二个术语。如果要始终将full_name作为短语进行搜索,则应使用自定义分析器使用关键字标记符和小写过滤器对其进行索引。或者,如果案例在您的条款中有意义,您可以将此字段编入索引为not_analyzed。