我想为每场比赛添加一个重量(如果其中一个匹配,则不添加一个重量):
拥有这样的文档:
[{
"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
,因为有两个类别匹配。我怎么能实现这一目标?
编辑:抱歉,我错过了添加弹性搜索版本。这是1.7.2
。
答案 0 :(得分:1)
这可能有点麻烦,因为对于多个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
}