【问题标题】:elastich search strange behaviour, looking for prefix of whole phrase but got prefix for every wordelasticsearch奇怪的行为,寻找整个短语的前缀,但每个单词都有前缀
【发布时间】:2012-04-18 02:00:59
【问题描述】:

我的索引可以说我有一个名为“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" 。我怎样才能避免它,只搜索第一个单词前缀?

【问题讨论】:

    标签: lucene elasticsearch


    【解决方案1】:

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

    【讨论】:

    • 有什么办法可以绕过它,使用一些适当的查询,或者我需要再次索引我的数据?
    • 我想不出任何合理的解决方法。如果存储了此字段,您可以创建一个脚本过滤器来检查每条记录。但是,这样的查询在大型索引上会非常慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多