2014-08-31 2 views
1

Возможно ли в elasticsearch получить все документы, содержащие фразу1 или фразу2 в одном запросе? я знаю, чтобы соответствовать фразе, можно использовать следующий запрос:Elasticsearch ИЛИ операция между фразами

"query" : { 
     "match_phrase" : { 
      "title" : "rock climbing" 
     } 
    } 

Но как насчет тот случай, когда есть несколько фраз, и цель состоит в том, чтобы получить документы, содержащие любые из этих фраз.

ответ

2

Вы можете обернуть два match_phrase запросов в предложении should в виде bool query:

{ 
    "query" : { 
    "bool": { 
     "should": [ 
     { 
      "match_phrase" : { 
      "title" : "phrase1" 
      } 
     }, 
     { 
      "match_phrase": { 
      "title": "phrase2" 
      } 
     } 
     ], 
     "minimum_number_should_match": 1 
    } 
    } 
} 
1

Вы можете выполнить Query String поиск

{ 
    "query_string" : { 
     "default_field" : "content", 
     "query" : "this AND that OR thus" 
    } 
} 

Вы можете указать AND/OR положение в запросе или использования default_operator и просто напишите ключевые слова на query параметр. Если вы хотите получить точный phare, просто заверните слова в кавычки.

+0

Это зависит от того, как поле «title» было отображено в вашем индексе. Если для вашего Tokenizer (ссылка ниже) установлено значение «whitespace», то два условия можно искать индивидуально, и этот ответ вернет желаемый результат. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/standard-tokenizer.html – Gillespie

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