2015-03-30 4 views
1

Я еще новичок в ElasticSearch, но в настоящее время я пытаюсь склонить голову к тому, почему я не могу смешивать подстановочный запрос с совпадением.ElasticSearch - Сочетание совпадений запросов с подстановочным знаком

Возьмите это тело JSON, например

{ 
    "size":"10", 
    "from":0, 
    "index":"example", 
    "type":"logs", 
    "body":{ 
     "query":{ 
      "match":{ 
       "account":"1234" 
      }, 
      "wildcard":{ 
       "_all":"*test*" 
      } 
     }, 
     "sort":{ 
      "timestamp":{ 
       "order":"desc" 
      } 
     } 
    } 
} 

Он возвращает ошибку "SearchPhaseExecutionException [Не удалось выполнить фазы [запрос], все черепки неуспешно;" (полный дамп: http://pastebin.com/uJJZm8fQ)

Однако, если я удаляю шаблон шаблона или соответствия из тела запроса - он возвращает результаты, как ожидалось. Я просматриваю документацию, и я вообще не могу найти какой-либо контент. Сначала я думал, что это связано с параметром _all, но даже если я явно укажу ключ, получается тот же результат.

Прежде чем предположить, что я должен использовать оператор «bool» или что-то подобное для смешивания моих типов запросов, есть ли какие-либо объяснения для этого?

+0

Эта ошибка связана с тем, что у вас неверный индекс поля json, (и есть и другие). Вы выполняете прямой запрос CURL или используете драйверы elasticsearch для конкретного языка программирования? – progrrammer

+0

Я изначально использовал официальную библиотеку PHP, но я делал отладку/тестирование с помощью CURL. Можете ли вы рассказать о «недопустимом индексе полей JSON»? – Mechzeit

ответ

1

Исключение говорит о том, что он не понимает поле «индекс». При запросе Elasticsearch вы указываете имя индекса и введите URL-адрес. В запросе match нет поиска подстановочных знаков. В запросе query_string есть поиск подстановочных знаков.

Ваш запрос должен быть чем-то вроде этого с match:

POST /example/logs/_search 
{ 
    "size": 10, 
    "from": 0, 
    "query" : { 
    "match": { 
     "account": "1234" 
    } 
    }, 
    "sort": { 
    "timestamp" : { 
     "order": "desc" 
    } 
} 

Или что-то подобное с query_string:

POST /example/logs/_search 
{ 
    "size": 10, 
    "from": 0, 
    "query" : { 
    "query_string": { 
     "default_field": "account", 
     "query": "*1234*" 
    } 
    }, 
    "sort": { 
    "timestamp" : { 
     "order": "desc" 
    } 
} 

EDIT: Добавление пример из wildcard запроса:

POST /example/logs/_search 
{ 
    "size": 10, 
    "from": 0, 
    "query" : { 
    "wildcard": "*test*" 
    }, 
    "sort": { 
    "timestamp" : { 
     "order": "desc" 
    } 
} 
+1

Когда вы говорите: «Нет поиска подстановки в вопросе соответствия». Как это возможно при выполнении {«query»: {«wildcard»: {"_ all": "* test *"}}} работает так, как ожидалось? – Mechzeit

+0

В Elasticsearch существует много разных типов запросов. Фрагмент json '{" query ": {" wildcard ": {" _ all ":" test "}}}' является ['wildcard' query] (http://www.elastic.co/guide/en/ elasticsearch/ссылка/ток/запросы DSL-подстановочный-query.html). Это не запрос '' match' (http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html). Каждый тип запроса в Elasticsearch имеет другой формат для объекта 'query' в запросе. То, как функция запроса 'match' и' wildcard' сильно отличается. – rclement

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