2016-12-02 3 views
-1

Предположим, что я ищу «быструю лисицу». Я хочу, чтобы этот запрос соответствовал всем документам, которые имеют быстрый первый, затем коричневый, не обязательно друг за другом, но они могут быть на любом расстоянии друг от друга, но в том же порядке. Таким образом, следующий документ «быстрая хорошая коричневая лиса» будет соответствовать, но документ «хорошая лиса, которая быстрая» не будет соответствовать.Elasticsearch: найти текст, который имеет условия в том же порядке, что и запрос

Согласование фразы сохраняет заказ, но является слишком ограничительным, так что термины должны находиться в одном и том же положении относительно друг друга, а добавление наклона не сохраняет порядок. Итак, как выполнить эту задачу?

+0

Пробовали ли вы, текст LIKE "% быстрое% лис%"? – TigOldBitties

ответ

0

Вам нужен span_near запрос, который имеет опцию slop, а также in_order вариант: https://www.elastic.co/guide/en/elasticsearch/reference/5.x/query-dsl-span-near-query.html.

Пример запроса из документации:

GET /_search 
{ 
    "query": { 
     "span_near" : { 
      "clauses" : [ 
       { "span_term" : { "field" : "value1" } }, 
       { "span_term" : { "field" : "value2" } }, 
       { "span_term" : { "field" : "value3" } } 
      ], 
      "slop" : 12, 
      "in_order" : false 
     } 
    } 
} 
Смежные вопросы