gpt4 book ai didi

elasticsearch - 如何在Elasticsearch中按文档数组中的对象的多个字段查询?

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

嗨,我是Elasticsearch的新手。我想按其字段的值(类型:数组)查询文档。像这样的例子:

docx=people:[
{id:1,role:admin},
{id:2,role:other}
]
docy=people:[
{id:1,role:other},
{id:2,role:admin}
]
我的查询是 people.id:1 AND people.role:admin。我的预期结果只是docx,但是ES也会返回docy。我知道这是错误的,但是如何在ES中做到这一点。因此,查询字符串如何仅过滤docx这样的文档。谢谢!

最佳答案

您需要使用nested data-type,因为对象数据类型被展平并单独处理,这导致两个文档都与结果匹配,这将添加一个工作示例。
但是请注意,如go-jek's medium blog.所述,当您拥有大数据集和大量并发查询时,嵌套数据类型会变得代价高昂
请关注this博客,该博客详细介绍了您的问题。
具有正确映射的工作示例
索引映射

{
"mappings": {
"properties": {
"name" : {
"type" : "text"
},
"people": {
"type": "nested"
}
}
}
}
索引样本doc
{
"name": "bar",
"people":
[
{
"id": 1,
"role": "other"
},
{
"id": 2,
"role": "admin"
}
]
}
和第二个示例文档
{
"name": "foo",
"people":
[
{
"id": 1,
"role": "admin"
},
{
"id": 2,
"role": "other"
}
]
}
搜索查询
{
"query": {
"nested": {
"path": "people",
"query": {
"bool": {
"must": [
{
"match": {
"people.id": 1
}
},
{
"match": {
"people.role": "admin"
}
}
]
}
}
}
}
}
和预期的搜索结果
"hits": [
{
"_index": "matchphrase",
"_type": "_doc",
"_id": "1",
"_score": 1.6931472,
"_source": {
"name": "foo",
"people": [
{
"id": 1,
"role": "admin"
},
{
"id": 2,
"role": "other"
}
]
}
}
]

关于elasticsearch - 如何在Elasticsearch中按文档数组中的对象的多个字段查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64675525/

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