gpt4 book ai didi

elasticsearch - Elasticsearch:嵌套字段上的 “must”查询

转载 作者:行者123 更新时间:2023-12-03 01:25:20 25 4
gpt4 key购买 nike

如何在同一嵌套下的多个字段上执行“必须”“匹配”查询?这是可复制的ES索引,其中“用户”字段定义为“嵌套”类型。

PUT my_index
{
"mappings": {
"properties": {
"user": {
"type": "nested",
"properties": {
"firstname": {"type": "text"}
}
}
}
}
}

这是2个文档:
PUT my_index/_doc/1
{
"user" : [
{
"firstname" : "John"
},
{
"firstname" : "Alice"
}
]
}

PUT my_index/_doc/2
{
"user" : [
{
"firstname" : "Alice"
}
]
}

对于此索引, 我如何查询都存在“John”和“Alice”的文档?使用上面定义的索引,我希望获得文档1,而不是文档2。到目前为止,我已经尝试了以下代码,但是未返回任何匹配:
GET my_index/_search 
{
"query": {
"nested": {
"path": "user",
"query": {
"bool": {
"must": [
{"match": {"user.firstname": "John"}},
{"match": {"user.firstname": "Alice"}}
]
}
}
}
}
}

最佳答案

以下查询是必需的。

POST my_index/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "user",
"query": {
"match": {
"user.firstname": "alice"
}
}
}
},
{
"nested": {
"path": "user",
"query": {
"match": {
"user.firstname": "john"
}
}
}
}
]
}
}
}

请注意,我是如何在单个must子句中使用两个嵌套查询的。这是因为,如果您注意到拥有 alicejohn的文档都被视为 two different documents

如果您的文档结构如下所示,则可以使用该查询:
POST my_index/_doc/3
{
"user" : [
{
"firstname" : ["Alice", "John"]
}
]
}

尝试阅读 this (nested datatype)this (nested query)链接以了解它们的工作原理,从第二个链接中,您可以看到以下信息:

The nested query searches nested field objects as if they were indexed as separate documents.



希望有帮助!

关于elasticsearch - Elasticsearch:嵌套字段上的 “must”查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58454773/

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