有人可以解释一下为什么匹配查询首先返回较少的相关结果吗?我有一个名为“规范化”的索引字段。其映射为:
normalized: {
type: "text"
analyzer: "autocomplete"
}
该字段的设置为:
analysis; {
filter: {
autocomplete_filter: {
type: "edge_ngram",
min_gram => "1",
max_gram => "20"
}
analyzer: {
autocomplete: {
filter: [
"lowercase",
"asciifolding",
"autocomplete_filter"
],
type: "custom",
tokenizer: "standard"
}
}
所以据我所知,它可以生成ascii,小写的 token ,例如MOUSE = m,mo,mou,mous,mouse。
问题是这样的请求:
{
'query': {
'bool': {
'must': {
'match': {
'normalized': 'simag'
}
}
}
}
}
返回类似的结果
但是没有 SIMAG ,它包含匹配短语的所有字母。
如何获得最相关的结果将是在不包含所有字母的标记之前包含所有字母的单词。
希望有人了解我的需求。
谢谢。
PS:我不确定,但是此查询如何:
{
'query': {
'bool': {
'should': [
{'term': {'normalized': 'simag'}},
{'match': {'normalized': 'simag'}}
]
}
}
}
与以前的代码相比,这有意义吗?
最佳答案
请注意,对匹配查询进行了分析,这意味着在查询时使用的是同一分析器,而在索引时使用的是您在查询中提到的字段的分析器。
在您的情况下,您在autocomplete
字段上应用了normalized
分析器,并且如上所述,它为MOUSE
生成了以下 token :MOUSE = m, mo, mou, mous, mouse.
以类似的方式,如果使用同一字段上的mouse
查询来搜索match
,它将搜索以下查询字符串:-m, mo, mou, mous, mouse
..因此,包含单词mousee
或mouser
之类的结果也将在索引期间出现。它创建了与搜索词上生成的 token 匹配的 token 。
在Elastic site https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html上了解有关匹配查询的更多信息第一行本身解释了您的搜索结果
如果您想深入了解,您的搜索查询如何匹配文档及其得分,请使用explain
API
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html
如果您有任何疑问,请告诉我
关于elasticsearch - Elasticsearch搜索结果相关性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55598966/