elasticsearch:为数组的每个匹配添加权重
elasticsearch: Add weight for each match of array
我想为每个匹配添加一个权重(而不是在其中一个匹配时添加一次权重):
拥有这样的文档:
[{
"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 个类别。我怎样才能做到这一点?
编辑:抱歉,我错过了添加弹性搜索版本。这是 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
}
我想为每个匹配添加一个权重(而不是在其中一个匹配时添加一次权重):
拥有这样的文档:
[{
"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 个类别。我怎样才能做到这一点?
编辑:抱歉,我错过了添加弹性搜索版本。这是 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
}