gpt4 book ai didi

elasticsearch - 在嵌套文档中搜索多个字段,在 Elasticsearch 中用or子句分隔

转载 作者:行者123 更新时间:2023-12-03 00:50:48 29 4
gpt4 key购买 nike

问题的标题不能完全证明我的要求。我有一个嵌套的文档形式

{
"tags": [
{
"context": "context_pic_elements",
"name": "walls",
"created_at": 1542806972000,
"tag_id": 48,
"tagging_id": 1225
},
{
"context": "element",
"name": "solo",
"created_at": 1542806972000,
"tag_id": 47,
"tagging_id": 1226
},
{
"context": "end_use",
"name": "home renovation",
"created_at": 1542806972000,
"tag_id": 45,
"tagging_id": 1224
}
],
"name": "Wall patterns",
}

该文档被映射到
{
"properties": {
"name": {
"type": "text"
},
"tags": {
"type": "nested",
"properties": {
"name": { "type": "keyword" },
"context": { "type": "keyword" },
"tag_id": { "type": "integer" }
}
}
}
}

我希望能够以以下形式查询图像
images WHERE
(tags.context="context_pic_elements" AND tags.name="walls")
OR (tags.context="element" AND tags.name="solo")

我现在正在尝试查询
{
"query": {
"nested" : {
"path" : "tags",
"query": {
"bool": {
"should" : {
"bool": {
"must": [
{"term": {"tags.context": "context_pic_elements"}},
{"term": {"tags.name": "walls"}}
]
}
}
}
}
}
}
}

这使我可以查询AND子句的第一个条件。我在查询的第二个AND条件( flex 搜索不允许在其查询中使用多个must子句)的位置,以使我可以通过这两个条件进行查询。我看着 elasticsearch bool query combine must with OR,但这不是我所需要的。

最佳答案

由于嵌套文档是单独的文档,因此您需要以另一种方式进行操作,即OR两个嵌套子句而不是嵌套两个OR子句,它是这样的:

POST index/_search
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"term": {
"tags.context": "context_pic_elements"
}
},
{
"term": {
"tags.name": "walls"
}
}
]
}
}
}
},
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"term": {
"tags.context": "element"
}
},
{
"term": {
"tags.name": "solo"
}
}
]
}
}
}
}
]
}
}
}

关于elasticsearch - 在嵌套文档中搜索多个字段,在 Elasticsearch 中用or子句分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53810743/

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