Упругие результаты поиска

В MySQL я могу сделать что-то вроде:

  SELECT id FROM table WHERE field = 'foo' LIMIT 5

Если таблица содержит 10 000 строк, этот запрос будет намного быстрее, чем если бы я оставил часть LIMIT.

В ElasticSearch у меня есть следующее:

 {
    "query":{
       "fuzzy_like_this_field":{
          "body":{
             "like_text":"REALLY LONG (snip) TEXT HERE",
             "max_query_terms":1,
             "min_similarity":0.95,
             "ignore_tf":true
          }
       }
    }
 }

Когда я запускаю этот поиск, это занимает несколько секунд, тогда как mysql может возвращать результаты для одного и того же запроса в гораздо меньшем времени.

Если я передаю параметр размера (установленный в 1), он успешно возвращает только 1 результат, но сам запрос не будет быстрее, чем если бы я установил размер неограниченным и вернул все результаты. Я подозреваю, что запрос выполняется полностью и только 1 результат возвращается после обработки запроса. Это означает, что атрибут "размер" бесполезен для моих целей.

Есть ли способ остановить поиск, как только найдет одну запись, которая соответствует нечеткому поиску, а не обрабатывать каждую запись в индексе перед возвратом ответа? Разве я не понимаю что-то более фундаментальное в этом вопросе?

Спасибо заранее.

Ответ 1

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

A лимитирующий фильтр может привести к аналогичному поведению к тому, что вы ищете.

Ограничивающий фильтр ограничивает количество документов (за осколок) для выполнения на

Для репликации mysql field='foo' попробуйте использовать фильтр терминов. Вы должны использовать фильтры, когда вам не нужны оценки, они быстрее и могут работать с кешем.