gpt4 book ai didi

Elasticsearch EdgeNgram 没有首先返回较短的结果

转载 作者:行者123 更新时间:2023-11-29 02:50:39 25 4
gpt4 key购买 nike

当我在一个字段上搜索时,评分似乎没有考虑字段的长度(即文本较长的文档与较短的文档的评分相同,并且出于某种原因放在前面)。不确定我做错了什么。

字段索引如下:

"name": {
"type": "string",
"analyzer": "autocomplete"
},
"_alias": {
"type": "string",
"analyzer": "autocomplete"
}

分析器:

"autocomplete": {
"char_filter": [
"special_character_mapping"
],
"filter": [
"lowercase",
"autocomplete_filter"
],
"tokenizer": "whitespace"
}

过滤器:

"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}

查询 1:

{
"query": {
"multi_match": {
"query": "brown fo",
"type": "most_fields",
"fields": [
"name",
"_alias"
],
"use_dis_max": true,
"tie_breaker": 1,
"minimum_should_match": "100%",
"analyzer": "standard"
}
}
}

这会返回很多文档,例如:

  • 棕色狐狸
  • 棕狐
  • 布朗尼为

在第 10 名左右终于有:

  • 棕狐

更不用说有一份文档(Brown fox tree)排在第 15 位左右,也有一个未考虑的别名“Brown”。

查询 2:

{
"query": {
"multi_match": {
"query": "brown fo",
"type": "cross_fields",
"fields": [
"name",
"_alias"
],
"use_dis_max": true,
"tie_breaker": 1,
"minimum_should_match": "100%",
"analyzer": "standard"
}
}
}

这会返回更好的结果:

  • 棕狐狸树
  • 棕狐
  • 棕狐

第二个和第三个文档的得分总是相同的。第一个的别名是“Brown”,排在最前面。

我尝试了各种 multi_match 类型和 query_string 但结果是一样的。

如何让文本较短的文档(lucene自己做?)排在前面?

最佳答案

由于您的字段 name_alias 已使用 autocomplete 分析器指定(请注意,因为您仅在索引时使用该分析器时间,你应该指定 index_analyzer 而不是 analyzer),你的输入将是:

  1. 以空格分隔
  2. 步骤 1 中的标记将被小写
  3. 第 2 步中的小写标记将被拆分为前缀

所以对于你上面给出的所有输入文本,它是这样的:

棕色狐狸 => b, br, bro, brow, brown, browne, browned, f, fo, 狐狸

棕狐 => b, br, bro, brow, brown, browni, brownis, brownish, f, fo狐狸狐狸狐狸

Browny for => b, br, bro, brow, brownbrownyffofor

棕狐 => b, br, bro, brow, 棕色ffo狐狸

棕狐树 => b, br, bro, brow , brown, f, fo, fox, t, tr , tre,

现在,当您使用标准 分析器搜索brown fo 时,搜索标记将是:brownfo

如您所见,标记 brownfo 出现在上面的所有 搜索词中,因此它们基本上是等价的。唯一会影响评分(以及排序顺序)的是是否在 name_alias 字段(或两者)中找到这些术语以及 type 您正在使用的字段匹配。没有看到具体的文档很难说,但您绝对应该尝试将 ?explain=true 添加到您的查询中,以更深入地了解评分的计算方式。

关于Elasticsearch EdgeNgram 没有首先返回较短的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com