4

В чем разница между Lucene's MoreLikeThis (mlt) и FuzzyQuery (flt)?Разница между нечеткими подобными и более подобными этому?

Я оцениваю обоих типов запросов через Elasticsearch (ES), и я обнаружил, что они концептуально очень похожи:

  • mlt: сравнить существующие документы полей с полями других документов, В.С.
  • flt: сравнить строка с полями других документов,

Однако flt производительность, кажется, примерно на порядок величины медленнее, чем mlt запроса.

Я использую новейшие ES, которые, в свою очередь, используют Lucene 4.5.


Из fuzzy like this документов:

Fuzzifies ВСЕХ условия, предоставляемые в виде строк, а затем выбирает лучший п дифференцирующего термины. По сути, это смешивает поведение FuzzyQuery и MoreLikeThis, но с особым учетом факторов нечеткого подсчета. Это, как правило, дает хорошие результаты для запросов, в которых пользователи могут предоставлять детали в нескольких полях и не знают синтаксиса булевых запросов, а также хотят получить степень нечеткого соответствия и быстрый запрос.

Для каждого источника термин нечеткие варианты хранятся в BooleanQuery без координирующего фактора (потому что мы не ищем совпадений по нескольким вариантам в любом документе). Кроме того, специализированный TermQuery используется для вариантов и не использует IDF этого варианта, поскольку это будет способствовать более редким терминам, таким как орфографические ошибки. Вместо этого все варианты используют одно и то же ранжирование IDF (одно для термина исходного запроса), и это учитывается в повышении варианта. Если исходный запрос не существует в индексе, используется средняя IDF вариантов.

+0

Могу ли я узнать, был ли полезен ответ? – javanna

+1

@javanna, извините за не отвечающий. Хорошо, ваш ответ хороший, и я узнал, что Fuzzy использует MLT внутри + некоторые дополнительные функции, что делает его значительно медленнее.То, что я хотел, было некоторым исходным кодом + примерами, которые иллюстрируют разницу, но это большая работа, и я просто могу сделать это сам когда-нибудь. До тех пор я с радостью принимаю ваш ответ :) – miku

ответ

2

Вы сравниваете more like this query с fuzzy like this query. Хотя последний добавляет некоторую нечеткость к более похожим на этот запрос, это не то же самое, что и fuzzy query, который используется под ним.

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

Такое нечеткое строение имеет сходную структуру и на самом деле более похоже на этот запрос, который также использует нечеткий запрос внутри, чтобы найти похожие документы. Это означает, что возвращенные документы будут содержать не только те условия, которые вы запросили, в like_text, но и аналогичные термины, применяя к ним некоторую нечеткость. Причина, по которой это медленнее, на самом деле является нечетким запросом, который дороже, хотя он значительно улучшил работу с Lucene 4.x.

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