gpt4 book ai didi

sorting - 通过大多数匹配过滤数组进行弹性排序

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

我有类似的文件:

{
id : 1,
title : One,
tags : {
{id : 1, title : One},
{id : 2, title : Two},
{id : 3, title : Three},
}
},
{
id : 2,
title : Two,
tags : {
{id : 1, title : One},
{id : 4, title : Four},
{id : 5, title : Five},
}
},
{
id : 3,
title : Three,
tags : {
{id : 1, title : One},
{id : 2, title : Two},
{id : 4, title : Four},
}
}

我按第一项的 tags.id进行过滤:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": {
"ids": {
"values": [1]
}
},
"should": [
{
"term": {
"tags.id": "1"
}
},
{
"term": {
"tags.id": "2"
}
},
{
"term": {
"tags.id": "3"
}
}
]
}
}
}
},
"track_scores": true,
"size": 20,
"sort": {
"_score": "desc"
}
}

有什么方法可以让大多数匹配标签按顺序排序吗?在这种情况下,应首先将项目 三个(2个匹配项)放在第一位,然后再将项目 进行两个(1个匹配项)。
看来,如果我使用没有查询的过滤器,那么所有项目的得分均为1。

最佳答案

那这个呢:

{
"query" : {
"bool": {
"must_not": {
"ids": {
"values": [1]
}
},
"should": [
{
"constant_score" : {
"filter" : {
"term": {
"tags.id": "1"
}
}
}
},
{
"constant_score" : {
"filter" : {
"term": {
"tags.id": "2"
}
}
}
},
{
"constant_score" : {
"filter" : {
"term": {
"tags.id": "3"
}
}
}
}
]
}
}
}

此查询将确保id = 1的记录不在结果中,并且对结果进行排序,以使具有更多匹配标签的结果位于具有更少匹配标签的结果之前。

根据您到目前为止提供的描述中要查找的内容,我认为 filtered查询不是必需的。 must_not子句将过滤掉不需要的结果。带有默认值的 bool查询将处理所需的顺序。

关于sorting - 通过大多数匹配过滤数组进行弹性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821107/

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