2015-12-15 2 views
1

Я использую elasticsearch 2.1. Я не совсем понимаю, что я делаю неправильно. Это меня озаряет разницы между запросами, фильтрами ... Не могли бы вы мне помочь?Простой поиск на ElasticSearch

Я пытаюсь выполнить этот запрос. Она возвращает мне пустой результат:

curl -XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' -d ' 
{ 
    "query": { 
     "filtered": { 
      "query": { "match_all": {} }, 
      "filter": { "term": { "channel": "Feina" } } 
     } 
    } 
} 
' 

Однако, когда я выполнить этот запрос без фильтров возвращает мне все:

curl -XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' -d ' 
{ 
    "query": { 
     "filtered": { 
      "query": { "match_all": {} }, 
     } 
    } 
} 
' 

Это образец документа:

{ 
    "user":"living_team", 
    "timestamp":"2015-12-14T18:06:47.085Z", 
    "matter":"snip2.PNG", 
    "comment":"Archive", 
    "channel":"Feina", 
    "feedTypes":[ 
    20 
    ], 
    "property_general_ldate":"2015-12-14T18:06:47.085Z", 
    "property_tSize":7595.0, 
    "resources":[ 
    { 
     "timestamp":"2015-12-14T16:58:00.598Z", 
     "matter":"snip2.PNG", 
     "comment":"Archive", 
     "channel":"Feina", 
     "feedType":20, 
     "mime":"image/png", 
     "source":{ 
      "sourceId":{ 
       "id":"C:\\Users\\Beep\\Desktop\\share\\snip2.PNG", 
       "batch":"c38eec2d-a282-11e5-baf4-382c4ab9e433", 
       "client":"VIM12HCNZL" 
      }, 
      "feedType":20, 
      "property_folder":"C:\\Users\\Beep\\Desktop\\share", 
      "property_lastAccessFolder_ldate":1450111821506 
     }, 
     "property_size":7595.0, 
     "property_creation_ldate":"2015-12-14T16:50:20.578Z", 
     "property_name":"snip2.PNG", 
     "nestedResources":[ 

     ] 
    } 
    ] 

ответ

1

Это должно сработать.

curl - XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' - d ' { 
{ 
    "query": {"match": { 
     "channel": "feina" }} 
}' 
2

Ваш channel поле, вероятно, analyzed и, следовательно, оно индексируется как строка с нижней строкой. Следующий запрос будет работать вместо этого (т.е. с feina в нижнем регистре):

curl -XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' -d ' 
{ 
    "query": { 
     "filtered": { 
      "query": { "match_all": {} }, 
      "filter": { "term": { "channel": "feina" } } 
     } 
    } 
} 
' 

Другим решением является, чтобы сделать ваше channel поле а not_analyzed строка в вашем отображения и ваш term фильтр будет работать с Feina (но не feina больше) , В конце концов, это зависит от того, как вы хотите хранить и искать свои данные.

+0

IMHO это должно быть решено не путем его нижнего резки вручную, а с помощью анализатора нижнего регистра. – Mantas

+0

Фильтр 'term' ничего не анализирует. Вместо этого можно использовать запрос 'match', и это тоже поможет. – Val

+0

Спасибо! Я пробовал с 'term filter ->" feina "' и с 'match filter ->" FeINa "', и они вернули документы правильно. Однако, если я хочу, чтобы это соответствовало словам типа «fein», «fen», «EIna» и т. Д. ... Что бы я сделал, чтобы решить это? – Jordi

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