gpt4 book ai didi

elasticsearch - Elasticsearch 查询以返回与数组中所有元素匹配的文档

转载 作者:行者123 更新时间:2023-12-02 23:49:10 25 4
gpt4 key购买 nike

我有一个类似的结构:

文件1:

nestedobject: {
uniqueid: "12345",
field: [ {id: 1,
color: blue,
fruit:banana},
{id: 2,
color: red,
fruit:apple},
]
}

文件2 :(在同一索引中)
nestedobject: {
uniqueid:23456,
field: [ {id: 3,
color: blue,
fruit:banana},
{id: 4,
color: blue,
fruit:banana},
]
}

字段映射可以看作是:
{"mappings":
"nestedobject":{
"properties":{
"uniqueid":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
"field":{
"type":"nested",
"id":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"color":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"fruit":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
}

现在,我尝试用2个文档查询该索引,而我只希望文档具有字段数组中所有元素的颜色,并且蓝色和水果为香蕉色-不支持ATLEAST 1。

现在,通过查询,我得到了与第一个文档的第一个元素匹配的两个文档,并返回了它们。

如何做到这一点?
{
"query": {
"nested" : {
"path" : "nestedobject.field",
"query" : {
"bool" : {
"must" : [
{ "match" : {"nestedobject.field.color" : "blue"} },
{ "match" : {"nestedobject.field.fruit" : "banana"}}
]
}
}
}
}
}

最佳答案

将查询更改为以下内容:

POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "field",
"query": {
"match":{
"field.color": "blue"
}
}
}
},
{
"nested": {
"path": "field",
"query": {
"match":{
"field.fruit": "banana"
}
}
}
}
]
}
}
}

请注意,在must子句中有两个 Nested Queries

还要注意,为了使用 精确匹配,您应该在 Term Queries字段上使用 keyword,如下所示:
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "field",
"query": {
"term": {
"field.color.keyword": "yellow"
}
}
}
},
{
"nested": {
"path": "field",
"query": {
"term": {
"field.fruit.keyword": "banana"
}
}
}
}
]
}
}
}

希望对您有所帮助,如果您认为已解决了您的问题,请单击此答案左侧的灰色大选中按钮,以 赞成和/或 接受答案

关于elasticsearch - Elasticsearch 查询以返回与数组中所有元素匹配的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926084/

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