lucene - elasticsearch奇怪的行为,寻找整个词组的前缀,但每个单词都有前缀

标签 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”。如何避免这种情况,仅搜索第一个单词的前缀?

最佳答案

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

关于lucene - elasticsearch奇怪的行为,寻找整个词组的前缀,但每个单词都有前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009814/

相关文章:

Java 线程在处理结束时变慢

c# - 如何在 Elasticsearch NEST 中序列化 JToken 或 JObject 类型的属性?

.net - Solr是否可用于.Net?

Solr 复杂刻面

java - 打开lucene索引时出错: java. io.IOException:映射失败

java - 从 ElasticsearchIO 等待 [10000] 毫秒后获取监听器超时

elasticsearch - 在 ElasticSearch 中删除旧 MetricBeats 数据的最佳实践

solr - 提高 Solr 查询中的协调因子

python - 映射在Elasticsearch中到底做了什么?

elasticsearch - 字词查询未返回字符串列表的结果