2013-11-23 2 views
2

Я изучаю elasticsearch и следую вместе с учебником. Я загрузил три документа в индекс. Когда я поставлю следующий запрос:Elasticseach нет результатов для json query

curl 'localhost:9200/vehicles/_search?query=driver.name:Jon' 

Я, как и ожидалось, возвращу объект два и объект три. Однако когда я пытаюсь использовать json:

curl localhost:9200/vehicles/_search -d' 

{ 
    "query":{ 
     "prefix":{ 
      "driver.name":"Jon" 
}}}' 

Я не получаю результатов. Я внимательно слежу за учебником, поэтому я не понимаю, в чем проблема. Любая помощь могла бы быть полезна. Загруженные объекты находятся ниже.

Спасибо!

id:one 
'{ 
    "color": "green", 
    "driver": { 
     "born":"1989-09-12", 
     "name": "Ben" 
}, 
    "make": "BMW", 
    "model": "Aztek", 
    "value": 3000.0, 
    "year": 2003 
}' 

id:two 
'{ 
    "color": "black", 
    "driver": { 
     "born":"1934-09-08", 
     "name": "Jon" 
    }, 
    "make": "Mercedes", 
    "model": "Benz", 
    "value": 10000.0, 
    "year": 2012 
}' 

id:three 
'{ 
    "color": "green", 
    "driver": { 
     "born":"1934-09-08", 
     "name": "Jon" 
    }, 
    "make": "BMW", 
    "model": "Benz", 
    "value": 10000.0, 
    "year": 2012 
}' 

ответ

1

prefix-query "соответствует документам, которые содержат поля, содержащие термины с заданным префиксом (не анализируются)".

Обратите внимание: «не проанализировано» - часть. Lucene ищет все, начиная с «Jon» в индексе, но стандартный анализатор сокращает сроки. То есть, «jon» находится в индексе, но «Jon» - нет.

Таким образом, если вы строчите текст в своем префиксном запросе, он должен работать. Вот приведенный пример: https://www.found.no/play/gist/7629456

+0

Спасибо! Это было именно так. Поиск «jon» работал как шарм. –

0

Try:

curl -XGET "http://localhost:9200/vehicles/_search" -d ' 
{ 
    "query": {"query_string" : { "query" : "driver.name:Jon" }} 
}' 

В любом случае, если вы новичок в elasticsearch я очень рекомендую вам прочитать документацию, потому что есть много типов запросов. Кроме того, результаты запросов также зависят от того, как вы индексируете документы, как вы определяете сопоставление и т. Д.

0

Чтобы использовать префиксный запрос, вам нужно попасть в непроанализированное поле. В ваших сопоставлениях для driver.name, если вы установите «index» на «not_analyzed», вы можете использовать префиксный запрос. В противном случае вы должны использовать запрос соответствия или что-то подобное.

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