gpt4 book ai didi

c# - 在分数计算Elasticsearch上忽略文本长度

转载 作者:行者123 更新时间:2023-12-03 00:55:56 25 4
gpt4 key购买 nike

我正在使用ES5。在C#上使用Nest 5。
我的ES解决方案中有一个人的索引。此人之间有一个“姓氏”,“姓氏”字段。

对于这些字段,我将使用带有“修剪”和“小写”标记过滤器的“空白”标记生成器。
我通过这两个字段实现了搜索。我遇到的问题是分数计算。这只是说明问题的一个示例:

如果我搜索“Lucas Gonzales”
我有2个文件

文件1:
名字=“卢卡斯”
LastName =“Perez”

文件2:
名字=“卢卡斯·胡安·何塞”
LastName =“Gonzales de Perez Almeida”,

即使文档2具有2个术语(Lucas和Gonzales),第一个也是第一个返回的。
当我看到带有有关kibana解释的查询时,我注意到对于文档2,分数较低,因为文本长度较大。

我想要做的是首先获取具有更多术语匹配的文档,而不必考虑文本长度(或任何其他条件)。因此,对于此示例,第二个文档将具有匹配的两个术语“Lucas”和“Gonzales”,因此应首先返回。

有什么好方法吗?考虑到我的人员模型具有大约20个属性,并且查询需要快速运行。

最佳答案

您应该为字段禁用norms,以消除字段长度的影响。这是映射的示例:

PUT my_index/_mapping/my_type
{
"properties": {
"firstName": {
"type": "text",
"norms": {
"enabled": false
}
},
"lastName": {
"type": "text",
"norms": {
"enabled": false
}
}
}
}

或者,对于 NEST客户端,这是属性映射
class Sample
{
[Text(Norms = false)]
public string FirstName { get; set; }

[Text(Norms = false)]
public string LastName { get; set; }
}

client.CreateIndex(indexName,
create => create.Mappings(
mappings => mappings.Map<Sample>(
map => map.AutoMap()
)
)
);

关于c# - 在分数计算Elasticsearch上忽略文本长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346235/

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