gpt4 book ai didi

elasticsearch - 带有子句转换为ES语法的ElasticSearch Lucene查询

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

我一直在尝试将Lucene样式查询转换为ES查询语法,但是我陷入了子句中。例如
(title:history^10 or series:history) and (NOT(language:eng) OR language:eng^5) and (isfree eq 'true' OR (isfree eq 'false' AND owned eq 'abc^5'))
这说明“让我为'title'或'series'中的历史匹配,但提高了标题匹配,并且语言不必是英语,但如果是,则将其提高,并且匹配免费或在哪里它不是免费的,然后确保它归客户abc所有”。

我觉得这是一个棘手的查询,但它似乎正常工作。将子句转换为ES语法会使我感到困惑,因为我实际上没有括号的概念。我想我需要使用 bool(boolean) 查询...我知道以下内容不正确地应用了标准-它说您应该有(language:eng或isFree eq'true'或owner:abc)。我似乎无法在没有NOT的情况下进行精神上的飞跃来构建必备品。

请帮忙?

  "query": {
"bool": {
"must": [
{
"multi_match": {
"query": "history",
"fields": [
"title^10.0",
"series"
]
}
}
],
"should": [
{
"term": {
"language": {
"value": "eng",
"boost": 5
}
}
},
{
"term": {
"isFree": {
"value": true
}
}
},
{
"term": {
"owned": {
"value": "abc",
"boost": 5
}
}
}
]
}
},

最佳答案

您的查询几乎是正确的,唯一未正确翻译的是查询的这一部分:

(isfree eq 'true' OR (isfree eq 'false' AND owned eq 'abc^5'))

如果我对您的帖子的理解正确,那基本上就是说,当“自有”字段的值为“abc”且价格为免费时,将其增加五倍。要实现此目的,您需要使用其他 bool(boolean) 查询:
  • 通过isFree: true过滤结果
  • 增强与abc匹配的任何文档的owner字段
  • "bool": {
    "filter": [
    {
    "term": {
    "isFree": {
    "value": false
    }
    }
    }
    ],
    "must": [
    {
    "term": {
    "owned": {
    "value": "abc",
    "boost": 5
    }
    }
    }
    ]
    }

    由于这不是为了限制结果集,而是仅提高满足此条件的结果,因此,上面的bool查询应放在父bool的 should部分中。最终查询如下:
    POST /myindex/_search
    {
    "explain": true,
    "query": {
    "bool": {
    "must": [
    {
    "multi_match": {
    "query": "history",
    "fields": [
    "title^10",
    "series"
    ]
    }
    }
    ],
    "should": [
    {
    "term": {
    "language": {
    "value": "eng",
    "boost": 5
    }
    }
    },
    {
    "bool": {
    "filter": [
    {
    "term": {
    "isFree": {
    "value": false
    }
    }
    }
    ],
    "must": [
    {
    "term": {
    "owned": {
    "value": "abc",
    "boost": 5
    }
    }
    }
    ]
    }
    }
    ]
    }
    }
    }

    注意:使用 shouldmust可以为内部bool产生相同的结果,老实说,我不确定哪种使用效果更好,所以我只是随意使用 must

    关于elasticsearch - 带有子句转换为ES语法的ElasticSearch Lucene查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62473474/

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