gpt4 book ai didi

elasticsearch - elasticsearch:为每个数组匹配添加权重

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

我想为每个匹配项添加一个权重(而不是一次匹配就添加一个权重):

有这样的文档:

[{
"username": "xyz",
"categories": [
{
"category.id": 1
},
{
"category.id": 2
}
]
}, {
"username": "xyz2",
"categories": [
{
"category.id": 1
}
]
}]

目前,我有此查询:
{
"query": {
"filtered": {
"query": {
"function_score": {
"query": {
"bool": {}
},
"score_mode": "sum",
"boost_mode": "sum",
"functions": [
{
"weight": 1.1,
"filter": {
"terms": {
"category.id": [
1,
2
]
}
}
}
]
}
},
"filter": {
"bool": {
"must_not": [
{
"terms": {
"_id": [
8
]
}
}
]
}
}
}
},
"from": 0,
"size": 30
}

通过此查询,两个条目都将获得一个权重的 1.1,但是我希望第一个条目获得 2 * 1.1,因为2个类别是匹配的。我该如何实现?

编辑:对不起,我错过了添加 flex 搜索版本的操作。这是 1.7.2

最佳答案

这可能有点麻烦,因为对于多个ID,查询将需要具有多个语句,但是我认为没有其他方法。另外,请注意您的字段引用不完整-正确的应该是categories.category.id。另外,在字段名称中使用点进行升级时,请小心。随着时间的推移,这在某些发行版中有所更改。

{
"query": {
"filtered": {
"query": {
"function_score": {
"query": {
"match_all": {}
},
"score_mode": "sum",
"boost_mode": "sum",
"functions": [
{
"weight": 1.1,
"filter": {
"term": {
"categories.category.id": 1
}
}
},
{
"weight": 1.1,
"filter": {
"term": {
"categories.category.id": 2
}
}
}
]
}
},
"filter": {
"bool": {
"must_not": [
{
"terms": {
"_id": [
8
]
}
}
]
}
}
}
},
"from": 0,
"size": 30
}

关于elasticsearch - elasticsearch:为每个数组匹配添加权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43733637/

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