gpt4 book ai didi

ElasticSearch:在对象数组中搜索

转载 作者:行者123 更新时间:2023-11-29 02:45:07 25 4
gpt4 key购买 nike

我在查询数组中的对象时遇到问题。让我们创建一个非常简单的索引,添加一个带有一个字段的类型并添加一个带有对象数组的文档(我使用 sense 控制台):

PUT /test/
PUT /test/test/_mapping
{
"test": {
"properties": {
"parent": {"type": "object"}
}
}
}
POST /test/test
{
"parent": [
{
"name": "turkey",
"label": "Turkey"
},
{
"name": "turkey,mugla-province",
"label": "Mugla (province)"
}
]
}

现在我想通过名称 "turkey""turkey,mugla-province" 进行搜索。第一个查询工作正常:

GET/test/test/_search {"query":{ "term": {"parent.name": "turkey"}}}

但是第二个什么都不返回:

GET/test/test/_search {"query":{ "term": {"parent.name": "turkey,mugla-province"}}}

我尝试了很多东西,包括:

"parent": {
"type": "nested",
"include_in_parent": true,
"properties": {
"label": {
"type": "string",
"index": "not_analyzed"
},
"name": {
"type": "string",
"store": true
}
}
}

但没有任何帮助。我想念什么?

最佳答案

这里有一种方法可以做到这一点,使用 nested文档:

我定义了这样一个索引:

PUT /test_index
{
"mappings": {
"doc": {
"properties": {
"parent": {
"type": "nested",
"properties": {
"label": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
}
}
}

索引您的文档:

PUT /test_index/doc/1
{
"parent": [
{
"name": "turkey",
"label": "Turkey"
},
{
"name": "turkey,mugla-province",
"label": "Mugla (province)"
}
]
}

然后这些查询中的任何一个都会返回它:

POST /test_index/_search
{
"query": {
"nested": {
"path": "parent",
"query": {
"match": {
"parent.name": "turkey"
}
}
}
}
}

POST /test_index/_search
{
"query": {
"nested": {
"path": "parent",
"query": {
"match": {
"parent.name": "turkey,mugla-province"
}
}
}
}
}

这是我使用的代码:

http://sense.qbox.io/gist/6258f8c9ee64878a1835b3e9ea2b54e5cf6b1d9e

关于ElasticSearch:在对象数组中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062264/

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