为弹性搜索中较早位置的搜索查询分配更高的分数

问题描述 投票:0回答:1

此问题与Val回答的我的其他问题enter link description here相似。区别在于,在这个问题中,我感兴趣的是搜索与文档中的单词完全匹配的查询。例如,我想搜索不带“ e”的“ Ann”来带回Anne Borg,Anne M Stone和Leanne Ray,但给Leanne Ray比其他两个文档更低的分数。 [请注意,在另一个问题中,我正在搜索“ Anne”,它与文档中的字符串完全匹配。在这里,我正在搜索“ Ann”,这不是完全匹配。我有一个包含3个文档的索引。

{ "firstname": "Anne", "lastname": "Borg", } { "firstname": "Leanne", "lastname": "Ray" }, { "firstname": "Anne", "middlename": "M", "lastname": "Stone" }

[当我搜索“ Ann”时,我希望Elastic返回所有这3个文档(因为它们都在一定程度上与“ Anne”相匹配)。但是,我希望Leanne Ray的得分(相关性排名)较低,因为搜索词“ Ann”在此文档中的出现位置要比其他两个文档中的出现要晚。

这是我的索引设置...

{ "settings": { "analysis": { "analyzer": { "my_analyzer": { "filter": [ "lowercase" ], "type": "custom", "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "token_chars": [ "letter", "digit", "custom" ], "custom_token_chars": "'-", "min_gram": "3", "type": "ngram", "max_gram": "4" } } } }, "mappings": { "properties": { "firstname": { "type": "text", "fields": { "keyword": { "type": "keyword" } }, "copy_to": [ "full_name" ] }, "lastname": { "type": "text", "fields": { "keyword": { "type": "keyword" } }, "copy_to": [ "full_name" ] }, "middlename": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } }, "copy_to": [ "full_name" ] }, "full_name": { "type": "text", "analyzer": "my_analyzer", "fields": { "keyword": { "type": "keyword" } } } } } }

这里是Val的查询,可以成功回答我以前的问题...

{ "query": { "bool": { "must": [ { "query_string": { "query": "Anne", "fields": [ "full_name" ] } } ], "should": [ { "multi_match": { "query": "Anne", "fields": [ "firstname", "lastname" ], "boost": 10 } } ] } } }

同时使用ngram令牌过滤器和ngram令牌生成器似乎很好地满足了这一挑战...

{ "settings": { "analysis": { "analyzer": { "my_analyzer": { "filter": [ "ngram" ], "tokenizer": "ngram" } } } }, "mappings": { "properties": { "firstname": { "type": "text", "fields": { "keyword": { "type": "keyword" } }, "copy_to": [ "full_name" ] }, "lastname": { "type": "text", "fields": { "keyword": { "type": "keyword" } }, "copy_to": [ "full_name" ] }, "middlename": { "type": "text", "fields": { "keyword": { "type": "keyword" } }, "copy_to": [ "full_name" ] }, "full_name": { "type": "text", "analyzer": "my_analyzer", "search_analyzer": "my_analyzer" } } } }

但是,查询还会带回大量根本不匹配查询的误报结果。相对于预期匹配的分数,这些误报具有非常低的分数是很有帮助的。

此问题与我的其他问题类似,Val在此处输入了链接描述。区别在于,在此问题中,我感兴趣的是搜索不完全相同的查询...

elasticsearch n-gram relevance booleanquery
1个回答
0
投票
答案与链接线程中的答案相同。由于您正在对所有索引数据进行ngram处理,因此它与Ann的工作方式与与Anne的工作方式相同,不过您会获得完全相同的响应(请参见下文),但得分不同:
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.