首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElasticSerach在多个嵌套对象中搜索相同的id

ElasticSerach在多个嵌套对象中搜索相同的id
EN

Stack Overflow用户
提问于 2017-02-01 22:32:28
回答 1查看 121关注 0票数 0

对于ElasticSearch 2.2,我有一个如下所示的映射:

代码语言:javascript
运行
复制
PUT /index/test_type/_mapping
{
  "test_type":{
       "properties":{
            "nested_one":{
                 "type":"nested",
                 "properties":{
                     "some_id":{
                         "type":"string"
                     }
                 }
             },
             "nested_two":{
                 "type":"nested",
                 "properties":{
                     "some_id":{
                         "type":"string"
                     }
                 }
             }
        }
     }

我必须创建一个搜索some_id,该搜索将在对象test_type中同时显示为nested_one和nested_two的属性(是的,我必须保留这个test_type包装器)。

因此,如果test_type.nested_one.some_id =1或test_type.nested_two.some_id =1返回elasticId (请注意,这里的some_id是相同的),则查询将类似于。

我找到了用于搜索嵌套数据类型和使用“或”的文档,但是没有任何文档可以通过“或”搜索对象内的多个嵌套对象中的相同属性。我的问题是,这个映射有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 23:17:33

下面是映射

代码语言:javascript
运行
复制
PUT index_name1
{
    "settings": {
        "analysis": {
            "analyzer": {},
            "filter": {}
        }
    },
    "mappings": {
        "test_type":{
       "properties":{
            "nested_one":{
                 "type":"nested",
                 "properties":{
                     "some_id":{
                         "type":"string"
                     }
                 }
             },
             "nested_two":{
                 "type":"nested",
                 "properties":{
                     "some_id":{
                         "type":"string"
                     }
                 }
             }
        }
     }
    }
}

以下是我索引的文档

代码语言:javascript
运行
复制
POST index_name1/test_type
{
  "nested_one" : [{
    "some_id" : 78
  },
  {
    "some_id" : 80
  },{
    "some_id" : 100
  }],
  "nested_two" : [{
    "some_id" : 79
  },
  {
    "some_id" : 80
  },{
    "some_id" : 101
  }]
}

以下是查询

代码语言:javascript
运行
复制
  POST index_name1/_search
{
    "query": {
        "bool": {
            "should": [{
                "nested": {
                    "path": "nested_one",
                    "query": {
                        "term": {
                            "nested_one.some_id": {
                                "value": 101
                            }
                        }
                    }
                }
            }, {
                "nested": {
                    "path": "nested_two",
                    "query": {
                        "term": {
                            "nested_two.some_id": {
                                "value": 101
                            }
                        }
                    }
                }
            }]
        }
    }
}

回覆

代码语言:javascript
运行
复制
{
  "took": 6,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 0.9808292,
    "hits": [
      {
        "_index": "index_name1",
        "_type": "test_type",
        "_id": "AVn788XeNIJY0Ao5vbA8",
        "_score": 0.9808292,
        "_source": {
          "nested_one": [
            {
              "some_id": 78
            },
            {
              "some_id": 80
            },
            {
              "some_id": 100
            }
          ],
          "nested_two": [
            {
              "some_id": 79
            },
            {
              "some_id": 80
            },
            {
              "some_id": 101
            }
          ]
        }
      },
      {
        "_index": "index_name1",
        "_type": "test_type",
        "_id": "AVn8BMr_NIJY0Ao5vbA_",
        "_score": 0.9808292,
        "_source": {
          "title": "harley harley harley",
          "nested_one": [
            {
              "some_id": 78
            },
            {
              "some_id": 80
            },
            {
              "some_id": 100
            }
          ],
          "nested_two": [
            {
              "some_id": 79
            },
            {
              "some_id": 80
            },
            {
              "some_id": 101
            }
          ]
        }
      },
      {
        "_index": "index_name1",
        "_type": "test_type",
        "_id": "AVn8BKlmNIJY0Ao5vbA-",
        "_score": 0.9808292,
        "_source": {
          "title": "harley harley",
          "nested_one": [
            {
              "some_id": 78
            },
            {
              "some_id": 80
            },
            {
              "some_id": 100
            }
          ],
          "nested_two": [
            {
              "some_id": 79
            },
            {
              "some_id": 80
            },
            {
              "some_id": 101
            }
          ]
        }
      }
    ]
  }
}

希望这能帮上忙谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41991068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档