Результаты поиска Elastic Search - PullRequest
10 голосов
/ 21 декабря 2011

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

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

Если в таблице 10000 строк, то этот запрос выполняется намного быстрее, чем если бы я пропустил часть 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 результат. Это означает, что атрибут «size» для моих целей бесполезен.

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

Заранее спасибо.

1 Ответ

9 голосов
/ 21 декабря 2011

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

A фильтр ограничения может дать вам поведение, подобноечто вы ищете.

Ограничительный фильтр ограничивает количество документов (на каждый шард), которые нужно выполнить на

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...