2016-12-20 5 views
0

Я новичок в ES, я хотел бы сделать простой запрос, чтобы получить все соответствующие значения домена, но он ничего не возвращает. Отдача match_all запроса:Эластичный поиск (DSL): term ничего не соответствует

curl -XGET localhost:9200/zone/20161201/_search -d '{"query": { "match_all": { }}}' 

{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":8,"max_score":1.0,"hits":[{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8TZ","_score":1.0,"_source":{"name":"domain2.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8Ta","_score":1.0,"_source":{"name":"domain3.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Te","_score":1.0,"_source":{"name":"domain3.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8Tb","_score":1.0,"_source":{"name":"domain4.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Tc","_score":1.0,"_source":{"name":"domain1.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Td","_score":1.0,"_source":{"name":"domain2.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ4AAQ6lL49IXWU8Tf","_score":1.0,"_source":{"name":"domain4.com"}},{"_index":"zone","_type":"20161201","_id":"AVkZ3-ic6lL49IXWU8TY","_score":1.0,"_source":{"name":"domain1.com"}}]}} 

, но когда я хочу, чтобы искать для одного конкретного значения, он не может найти что-нибудь:

curl -XGET localhost:9200/zone/20161201/_search -d '{"query":{"term":{"name":"domain3.com"}}}' 

Можете ли вы мне помочь? Что случилось с этим?

ответ

1

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

Какие изображения подходят для вашего типа? Терминальные запросы используются для не проанализированных полей и возвращают только точные соответствия.

Для получения более подробной информации, пожалуйста, ознакомьтесь с документацией. В частности в разделе «Почему не термин запрос соответствует моему документу

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-term-query.html

1

Попробуйте следующий запрос:

GET zone/20161201/_search 
{ 
    "query": { 
     "match": { 
     "name": "domain3.com" 
     } 
    } 
} 

это будет работать. Теперь попробуйте следующее индексирование и запрос:

POST zone/20161201/ 
{ 
    "name":"domain.com" 
} 

примечание что мы индекс домен, без числа.

попробуйте Youre запрос: работа

GET zone/20161201/_search 
{ 
    "query": { 
     "term": { 
     "name": "domain.com" 
     } 
    } 
} 

этот запрос также.

При индексировании строки с строкой типа «domain3», эластичность индексирует ее как [домен, 3] (анализатор по умолчанию), а затем, если вы используете термин запрос, эластичный взгляд на точный термин, поэтому он смотрит на «domain3», но не найден потому, что эластик индексирует его как домен и 3. , поэтому лучший способ использовать запрос соответствия. если вы точно знаете, что вы делаете, вы можете использовать термин query.

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