2016-09-03 2 views
0

Как написать запрос для следующего условия в elasticsearchКомбинации и или elasticsearch

Select * from table1 where (cnd1 or cond2) and (cnd3) 

Мое значение cond2 составляет от вложенного объекта. Мой объект JSON ниже

details={ "name"="name1", 
     "address":"{ 
     "city":"city1" 
     }" 
     } 

Мне нужно взять город сверху объекта

details.address.city 

выше синтаксис является правильным, если не то, как получить значение второго объекта города.

ответ

0
{ 
     "bool" : { 
      "must" : cond3, 
      "should" : [ 
       cond1, 
       cond2 
      ], 
      "minimum_should_match" : 1 
     } 

} 

пройти по этой ссылке для получения дополнительной информации https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html

+0

Привет, черная мама, спасибо за ваше предложение. Теперь я изменил свой вопрос, вы можете предложить для моего измененного запроса – venkat

+0

, можете ли вы дать мне свое картографирование? какой запрос вы сейчас пытаетесь сделать? – blackmamba

+0

вы даете мне идею на вопрос, который я задал, и еще одно - для cond2 мне нужно проверить значение города внутри моего вложенного объекта. – venkat

0

Вы можете легко создать условные запросы с Elasticsearch. Но есть какая-то странная ситуация в вашем разделе данных.

details={ "name"="name1", 
     "address":"{ 
     "city":"city1" 
     }" 
     } 

Elasticsearh сохраняет ваши данные как объект json, но вы должны указать свои данные как json. В этом разделе есть объект, который вы пытаетесь отправить. Давайте рассмотрим:

Существует атрибут name для подробного объекта, это строка. А также есть атрибут адреса, и это тоже строка. Это должен быть объект, который должен включать атрибут города, если вы хотите достичь этого объекта через details.address.city. Теперь мы пытаемся исправить:

{ 
    "id":..., 
    ... 
    "details": { 
    "name": "name1", 
    "address": { 
     "city": "city1" 
    } 
    } 
} 

В этом случае я удаляю двойные кавычки объекта детали. Теперь вы можете достигнуть атрибута города json как объекта json. Теперь мы создаем запрос, чтобы достигнуть города:

{ 
    "query": { 
    "bool": { 
     "must": { 
     "term": { 
      "your-json-attribute": "???" 
     } 
     }, 
     "should": [ 
     { 
      "term": { 
      "your-json-attribute": "???" 
      } 
     }, 
     { 
      "term": { 
      "your-json-attribute": "???" 
      } 
     } 
     ] 
    } 
    } 
} 

Я использую term запрос, но есть много других типов запросов. Вы можете проверить их на документацию. Но для And и Or вы можете использовать запрос bool. Проверьте https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-bool-query.html

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