gpt4 book ai didi

elasticsearch - 和+或使用 Elasticsearch REST API进行查询

转载 作者:行者123 更新时间:2023-12-02 22:32:38 26 4
gpt4 key购买 nike

我们如何在 flex 搜索中结合AND / OR查询。例如,以下是我们拥有的文件

{"title": "MI2", "brand": "Xiomi","operatingSystem": "Android"},
{"title": "Nexus","brand": "Google","operatingSystem": "Android"},
{"title": "Samsung Note","brand": "Samsung","operatingSystem": "Android"},
{"title": "Samsung Galaxy","brand": "Samsung","operatingSystem": "Android"}

现在,我们如何查询三星或Xiomi的Android手机。

(OperatingSystem ==“Android”)AND(brand ==“Samsung”或brand ==“Xiomi”)

最佳答案

AND / OR逻辑可以用作过滤器。

elasticsearch中的过滤器将在执行查询之前进行评估,因此,如果您需要将此逻辑应用于还包含字符串查询的调用,它将仍然有效且适用。

当您的OR代码正在评估属性(在本例中为brand)时,您可以在AND语句中使用条款过滤器。您的ES call 如下所示:

{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "your search string"
}
},
"filter": {
"and": [
{
"term": { "operatingSystem": "Android" }
},
{
"terms": { "brand": ["Samsung", "Xiomi"] }
}
]
}
}
}
}

您可能会看到条款 here的文档。默认值为 bool(boolean) OR,返回与提供的任何值匹配的文档。

为了扩展您的问题,如果您希望第二部分评估 不同的属性上的OR语句,例如,使用标题和品牌的数据结构,它将看起来如下:
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "your search string"
}
},
"filter": {
"and": [
{
"term": { "operatingSystem": "Android" }
},
{
"or": [
{
"term": { "brand": "Xiomi" }
},
{
"term": { "title": "Samsung Note" }
}
]
}
]
}
}
}
}

后者等效于:
( operatingSystem == "Android" ) AND ( title == "Samsung Note" OR brand == "Xiomi")

关于elasticsearch - 和+或使用 Elasticsearch REST API进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804115/

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