gpt4 book ai didi

elasticsearch - 搜索两个字段,但在Elasticsearch中仅得分一次

转载 作者:行者123 更新时间:2023-12-02 23:08:23 24 4
gpt4 key购买 nike

假设我在Elasticsearch中有这些文档:

{
"display_name": "Jose Cummings",
"username": "josecummings"
},
{
"display_name": "Jose Ramirez",
"username": "elite_gamer"
},
{
"display_name": "Lance Abrams",
"username": "abrams1"
},
{
"display_name": "Steve Smith",
"username": "josesmose"
}
我想对 Jose进行“键入时”搜索,以同时搜索 display_nameusername字段,我可以这样做:
{
"query": {
"bool": {
"must": {
"multi_match": {
"fields": [
"display_name",
"username"
],
"query": "Jose",
"type": "bool_prefix",
"fuzziness": "AUTO",
"boost": 50
}
}
}
}
}
这里的问题是,当我搜索 Jose时,Jose Cummings获得100分,而Jose Ramirez和Steve Smith仅获得50分,因为这似乎将两个 Realm 的得分相加。这实质上是奖励用户拥有与 display_name相同的 username,我们不想发生这种情况。
有没有办法仅从两个字段中获得最高分?我现在尝试使用 function_scoreboost_mode / score_modeconstant_score,尝试与多个 should查询进行 match_bool_prefix匹配等数十种不同的组合。

最佳答案

试试这个:

{
"query": {
"bool": {
"must": [
{
"multi_match": {
"fields": [
"display_name^50",
"username^50"
],
"query": "Jose",
"type": "bool_prefix",
"fuzziness": "AUTO",
"tie_breaker": 0.3
}
}
]
}
}
}
注意 tie_breaker 设置为0.0的效果,而不是0
另请注意,您的 bool_prefix

scoring behaves like most_fields, but using a match_bool_prefix query instead of a match query.


也许您确实希望字段带有 jose前缀。但是如果用户名是 cool_jose,它将被排除在外(除非您例如应用非标准的 analyzer)...

关于elasticsearch - 搜索两个字段,但在Elasticsearch中仅得分一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62803161/

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