2015-03-12 1 views
0

Мои данные имеют локальные поля, которые представляют собой массив строк.Как выполнить поиск в списке строк в Elastic Search?

"localities": [ 
"Mayur Vihar Phase 1", 
"Paschim Vihar", 
"Rohini", 
"", 
"Laxmi Nagar", 
"Vasant Vihar", 
"Dwarka", 
"Karol Bagh", 
"Inderlok" ] 

Какой запрос я должен написать для фильтрации документов по определенной местности, например, «Rohini»?

ответ

1

Простой вопрос match будет достаточным (если вы не знаете, как отображает ваше поле localities).

POST <your index>/_search 
{ 
    "query": { 
    "match": { 
     "localities": "Rohini" 
    } 
    } 
} 

Если localities поле установлено как string типа и index, как not_analyzed, лучший способ запроса это использовать term фильтр, обернутый в filtered запросе (вы не можете напрямую использовать фильтры):

POST <your index>/_search 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "term": { 
      "localities": "Rohini" 
     } 
     } 
    } 
    } 
} 

Если не нужен счет, второе решение путь в качестве фильтров не вычисляет счет, быстрее и кэшируются.

Проверьте документацию для получения информации об анализе, которая является очень важной темой в ElasticSearch, сильно влияя на то, как вы запрашиваете.

0
POST /_search 
{ 
    "query": { 
    "match": { 
     "localities": "Rohini" 
    } 
    } 
} 

Или вы можете просто запрос:

GET /_search?q=localities:Rohini 
+0

Запрос GET не работает, как тело запроса не используется. Если вы используете Sense, будьте осторожны, поскольку он автоматически преобразует запрос в POST (вы можете проверить его, отслеживая исходящий запрос), если он предоставлен для тела. – ThomasC

+0

Да, Sense автоматически преобразует его. С 'curl' вы должны использовать POST. – ForzaGreen

+0

Спасибо Томас, Форза за ответы. – vijayst

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