gpt4 book ai didi

elasticsearch - 基于大多数匹配的查询的 Elasticsearch 相关性

转载 作者:行者123 更新时间:2023-12-02 22:52:01 28 4
gpt4 key购买 nike

我有以下映射

posts":{
"properties":{
"prop1": {
"type": "nested",
"properties": {
"item1": {
"type": "string",
"index": "not_analyzed"
},
"item2": {
"type": "string",
"index": "not_analyzed"
},
"item3": {
"type": "string",
"index": "not_analyzed"
}
}
},
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}

对于这些映射,请考虑如下索引的对象
{
"name": "Name1",
"prop1": [
{
"item1": "val1",
"item2": "val2",
"item3": "val3"
},
{
"item1": "val1",
"item2": "val5",
"item3": "val6"
}
]
}

还有另一个对象
{
"name": "Name2",
"prop1": [
{
"item1": "val2",
"item2": "val7",
"item3": "val8"
},
{
"item1": "val12",
"item2": "val9",
"item3": "val10"
}
]
}

现在说我想搜索具有prop1.item1值为“val1”或“val2”的文档。我还希望对结果进行排序,以使同时具有val1和val2的文档比仅具有“val1”或“val2”之一的文档具有更高的分数。

我尝试了以下查询,但似乎没有根据匹配数来评分
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "prop1",
"filter": {
"or": [
{
"and": [
{"term": {"prop1.item1": "val1"}},
{"term": {"prop1.item2": "val2"}}
]
},
{
"and": [
{"term": {"prop1.item1": "val1"}},
{"term": {"prop1.item2": "val5"}}
]
},
{
"and": [
{"term": {"prop1.item1": "val12"}},
{"term": {"prop1.item2": "val9"}}
]
}
]
}
}
}
}
}
}

现在,尽管它应该同时提供两个文档,但是第一个文档应具有更高的分数,因为它包含筛选器中的2个事物,而第二个文档仅包含一个事物。
有人可以帮助进行正确的查询来根据大多数匹配项对结果进行排序吗?

最佳答案

分数不是根据过滤器计算的,而是使用嵌套查询:

{
"query": {
"nested": {
"score_mode": "sum",
"path": "prop1",
"query": {
"bool": {
"should": [{
"bool": {
"must": [{
"match": {
"prop1.item1": "val1"
}
},
{
"match": {
"prop1.item2": "val2"
}
}]
}
},
{
"bool": {
"must": [{
"match": {
"prop1.item1": "val1"
}
},
{
"match": {
"prop1.item2": "val5"
}
}]
}
},
{
"bool": {
"must": [{
"match": {
"prop1.item1": "val12"
}
},
{
"match": {
"prop1.item2": "val9"
}
}]
}
}]
}
}
}
}
}

关于elasticsearch - 基于大多数匹配的查询的 Elasticsearch 相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24978782/

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