2017-02-01 11 views
0

у меня есть отображение, которое выглядит следующим образом для ElasticSearch 2,2:поиска ElasticSerach для таких же идентификатора в нескольких вложенных объектах

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, которые появляются как свойство как nested_one и nested_two внутри объекта test_type (и да, я должен сохранить эту оболочку test_type).

Таким образом, запрос будет выглядеть примерно так: test_type.nested_one.some_id = 1 ИЛИ test_type.nested_two.some_id = 1 return elasticId (обратите внимание, что some_id здесь то же самое).

Я нашел документацию для поиска вложенных типов данных и с помощью «или», но ничего не может найти одно и то же свойство в нескольких вложенных объектах внутри объекта через «или». Мой вопрос: возможно ли это с этим отображением?

ответ

0

Ниже отображения

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" 
        } 
       } 
      } 
     } 
    } 
    } 
} 

Ниже приведен документ я индексироваться

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 
    }] 
} 

Ниже запроса

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 
          } 
         } 
        } 
       } 
      }] 
     } 
    } 
} 

réponse

{ 
    "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

очень очень близко я думаю, но nested_two.some_id и nested_one.some_id такое же идентификатор 80. Таким образом, я должен получить удар, если some_id: 80 в ЯВНО nested_one или nested_two! – arturobelano

+0

да, это будет работать именно так. вы можете запустить запрос с 101 вместо 80 – user3775217

+0

@arturobelano отредактировал сообщение с измененным запросом и ответом. спасибо – user3775217

 Смежные вопросы

  • Нет связанных вопросов^_^