Содержание
Алгоритм BM25 / Хабр
Впервые данный алгоритм встретил на Википедии и не обратил на него особого внимания. Позже изучая научные труды сотрудников Яндекса, я обратил внимание на то, что они ссылаются на него, например, в статье Сегаловича об алгоритмах определения нечетких дубликатов, поэтому решил разобраться, в чем смысл его использования. Постараюсь на простых примерах это объяснить. Итак, для чего этот алгоритм?
Первое. Вводится зависимость релевантности от вхождения или не вхождения слов в запросах с более чем одного слова.
Пусть есть несколько запросов состоящих из нескольких слов, например (пример чисто иллюстративный):
- купить смартфон Samsung
- купить смартфон Samsung Galaxy
Пусть сравниваются два документы (опять же иллюстративно) и первый документ не содержит слова Galaxy. Согласно расчетов оценка релевантности эта сума релевантностей каждого из слов.
Релевантность каждого из слова равна его IDF * на второй множитель в выражении выше. Релевантность всего поискового запроса равна сумме релевантностей всех слов. Таким образом, отсутствие слова или другими словами (его частота) равна 0 дает релевантность 0. Поэтому если по двум первым словам score будет одинаково то более релевантным будет тот документ, который содержит слово Galaxy.
Второе. Преимущество при поиске в запросах с более чем 2-ух слов, одно из которых менее употребительно (более узкоспециализированное) будет отдаваться документам которые содержат это узкоспециализированное слово. Например, есть запрос купить Samsung Galaxy Note 2 (чисто иллюзорный пример). Пусть Note 2 – это более редкое слово (меньше раз встречается в коллекции чем Samsung и Galaxy). Пусть есть 2-а документа каждый из которых релевантен запросу и каждый из них содержит кроме Samsung и Galaxy также Note 2. При этом в первом документе note 2 употребляется только один раз, тогда как во втором – 3 раза (подразумевается, что документ содержит больше информации о Note 2). Но сначала рассмотрим, результат вычисление релевантности алгоритмом, если частоты всех указанных слов в документах одинаковы. Вот что получается по BM25 в Excel.
Обратите также внимание, что из-за того, что количество документов содержащее слово Note 2 меньше равно в 50 раз от содержащих слово galaxy (500) мы получаем IDF равный 3,279634 что значительно больше IDF для слова galaxy.
Пока что у нас были одинаковые значения частот для слова note 2 (для других слов также). Теперь давайте в Excel увеличим частотность слова note 2 для док2, вместо 0,02 сделаем 0,05 (5 вхождений слова).
Обратите внимание, что значение IDF не изменяется но значение формула (второй множитель на изображении в самом вверху) теперь стало равно 0,061856 и именно это значение участвует в вычислении score, которое теперь для док2 равно уже 0,290559
Теперь самое главное. Увеличим частоту вхождения слова galaxy до 5 в док 1
Как мы видим суммарная частота каждого из слов в док1 и док2 одинакова. Но значение score (релевантность) выше у док2, потому что слово note2 является более редко встречающимся соответственно его результирующее влияние больше чем слово galaxy.
На практике наличие слов в многосложных запросах очень важно. Конечно же релевантность современных поисковых систем определяется не только исходя из частот как это было показано на примере формулы BM25, но все же некоторые корреляции провести можно. В основном это касается того, что если в документе нет слова из поискового запроса то такому документу значительно сложнее подняться в ТОП по запросу по сравнению с теми, у которых это слово содержится. Давайте рассмотрим пример на поисковой системе Яндекс.
Вводим запрос Samsung galaxy. У меня выдача касалась Samsung galaxy в целом (2 сайта, как обычно Википедия) остальное модели, картинки и т.д.
Вводим запрос samsung galaxy note 2. Выдача полностью меняется, теперь представлены страницы, которые содержат информацию не просто о Samsung galaxy, а о Samsung galaxy note 2.
Вводим запрос samsung galaxy note 2 ценаОпять выдача меняется теперь в выдаче страницы, которые уже содержат слово цена, а не просто Samsung galaxy.
Вводим запрос samsung galaxy note 2 цена Харьков. Выдача кардинально меняется, все страницы в ТОП10 содержат слово Харьков.
Можно ли сказать, что слово Харьков является более узкоспециализированным, как это приводилось в алгоритме BM25 выше? IDF cлова Харьков знает только поисковая система, но в контексте поискового запроса Samsung galaxy note 2 оно без сомнения сужает область поиска. Может быть пример с Яндексом немного неудачен, в силу того, что в приведенном случае большую роль будет играть учет региональности запроса, но я думаю со мной согласится любой сеошник, что слово из поискового запроса обязательно должно быть в тексте, я же всего лишь постарался показать работу алгоритма BM25 и раскрыть 2-а важных его аспекта.
Ссылка на xls документ — книга11.xls
25 — Газоанализатор: Описание, цена, заказ
Аналитприбор / Каталог
/ Продукция партнеров / Газоанализаторы портативные / BM-25 Газоанализатор
Цена: По запросу
Доставка: В любой регион
Доставка продукции осуществляется транспортными компаниями на Ваш выбор. Подробнее о доставке и оплате
Оформить заявку
Есть вопросы? Задать вопрос специалисту.
- Описание
- Фото 4
Содержание
- Описание BM-25
- Особенности BM-25
- Технические характеристики BM-25
- До 5 каналов измерения
- «Интеллектуальные» взаимозаменяемые датчики
- Ударопрочный корпус
- Четкий ЖК дисплей с подсветкой
- Мощная звуковая и световая сигнализация
- Встроенная память
Мультигазоанализатор BM-25 разработан специально для работы в трудных условиях на открытых рабочих площадках. Компактный, прочный, с мощными аварийными сигналами и большой автономией, этот газовый детектор способен защитить группу людей или периметр площадки. BM-25 специально приспособлен для применения ремонтными бригадами на передвижных или временных рабочих площадках и там, где затруднительно установить стационарный газоанализатор.
Особенности BM-25
- Определение 5 газов одновременно, 6 диапазонов измерения, универсальный эксплозиметр;
- Может применяться в Зоне 0, возможно постоянное питание;
- Интеллектуальные взаимозаменяемые ячейки: классические и инфракрасные;
- Эргономичность в соответствии с окружающей средой на площадке.
Технические характеристики BM-25
Назначение: | Контроль токсичных, горючих газов/кислорода |
Корпус: | Ударопрочный антистатический поликарбонат |
Определяемые газы: | От 1 до 5 см. спецификацию |
Измерения: | Непрерывные |
Датчики: | Электрохимический, термокаталитический или ИК (в зависимости от контролируемого газа) |
Дисплей: | Жидкокристаллический графический с подсветкой |
Аварийные сигналы: | Мощный звуковой (105 дБ) и визуальный аварийные сигналы |
Функция самотестирования: | Да |
Регистрация данных: | Непрерывная. В памяти хранятся результаты измерений за последний год |
Связь с ПК: | Да |
Источник питания: | Ni-MH АКБ |
Время автономной работы: | до 300 часов |
Время зарядки: | 5 часов |
Влагозащита: | IP 66 |
Температурный диапазон: | От — 25 до + 40 ?С |
Вес: | 7,5 кг |
Габаритные размеры: | 110х80х45 мм |
Рекомендуем:
MX-2100
Портативный газоанализатор
Макс. кол-во каналов: 5
Тип прибора: Переносной
Сенсор: Электрохимический, Термокаталитический, Оптический
Цифровая индикация: Да
Измерение: O2, h3, CO, CO2, SO2, h3S, CL2, NO, NO2, HCL, EX, O3, HF, Ph4
Взрывозащита: Нет
Подробнее
MX-6
Портативный газоанализатор
Макс. кол-во каналов: 6
Тип прибора: Переносной
Сенсор: Электрохимический, Термокаталитический, Оптический, Фотоионизационный
Цифровая индикация: Да
Измерение: O2, h3, CO, CO2, SO2, h3S, NO, NO2, Nh4, HCL, EX, Ch5, Ph4
Взрывозащита: Нет
Подробнее
М-40
Портативный газоанализатор
Макс. кол-во каналов: 4
Тип прибора: Переносной
Сенсор: Электрохимический, Термокаталитический
Цифровая индикация: Да
Измерение: O2, CO, h3S, EX
Взрывозащита: Нет
Подробнее
Gasbadge Pro
Газоанализатор
Макс. кол-во каналов: 1
Тип прибора: Переносной
Сенсор: Электрохимический
Цифровая индикация: Да
Измерение: O2, CO, SO2, h3S, CL2, NO2, Nh4, Ph4
Взрывозащита: Нет
Подробнее
Практический BM25 — Часть 2: Алгоритм BM25 и его переменные
Это второй пост в серии из трех частей Практический BM25 о ранжировании сходства (релевантности). Если вы только присоединяетесь, ознакомьтесь с Часть 1: Как осколки влияют на оценку релевантности в Elasticsearch. Алгоритм BM25 в происходящее. Сначала посмотрим на формулу, потом разобью каждый компонент на понятные части:
Мы видим несколько общих компонентов, таких как q i , IDF(q i ), f(q i ,D), k1, b и кое-что о длинах полей. Вот о чем каждый из них:
- q i — это i th термин запроса.
Например, если я ищу «шейн», будет только 1 термин запроса, поэтому q 0 — это «шейн». Если я ищу «shane connelly» на английском языке, Elasticsearch увидит пробел и разметит это как 2 термина: q 0 будет «шейн», а q 1 будет «коннелли». Эти термины запроса подключаются к другим битам уравнения, и все они суммируются.
- IDF(g i ) – это обратная частота документа для i -го -го термина запроса.
Для тех, кто раньше работал с TF/IDF, концепция IDF может быть вам знакома. Если нет, не беспокойтесь! (И если это так, обратите внимание, что существует разница между формулой IDF в TF/IDF и IDF в BM25. ) Компонент IDF нашей формулы измеряет, как часто термин встречается во всех документах, и «штрафует» термины, которые являются общими. . Фактическая формула, используемая Lucene/BM25 для этой части:
Где docCount — это общее количество документов, которые имеют значение для поля в сегменте (по сегментам, если вы используете
search_type=dfs_query_then_fetch
) и f(q i ) — количество документов, содержащих i th термин запроса. В нашем примере мы видим, что «шейн» встречается во всех 4 документах, поэтому для термина «шейн» мы получаем IDF («шейн»):Однако мы видим, что «коннелли» появляется только в 2 документах, поэтому мы получаем IDF («коннелли»):
Здесь мы видим, что запросы, содержащие эти более редкие термины («коннелли» реже, чем «шейн» в нашем корпусе из 4 документов), имеют более высокий множитель, поэтому они вносят больший вклад в итоговую оценку. Это имеет интуитивно понятный смысл: термин «the», вероятно, встречается почти в каждом документе на английском языке, поэтому, когда пользователь ищет что-то вроде «слон», «слон», вероятно, важнее — и мы хотим, чтобы он вносил больший вклад в поисковый запрос. оценка — чем термин «the» (который будет почти во всех документах).
- Мы видим, что длина поля делится на среднюю длину поля в знаменателе как fieldLen/avgFieldLen.
Мы можем рассматривать это как длину документа относительно средней длины документа. Если документ длиннее среднего, знаменатель увеличивается (уменьшается оценка), а если он короче среднего, знаменатель уменьшается (увеличивается оценка). Обратите внимание, что реализация длины поля в Elasticsearch основана на количестве терминов (а не на чем-то другом, например, на длине символа). Это точно так, как описано в исходной статье BM25, хотя у нас есть специальный флаг (discount_overlaps) для обработки синонимов, если вы того пожелаете.
Об этом можно думать следующим образом: чем больше терминов в документе — по крайней мере, не соответствующих запросу — тем ниже оценка документа. Опять же, это имеет интуитивный смысл: если документ состоит из 300 страниц и в нем один раз упоминается мое имя, он с меньшей вероятностью будет иметь такое же отношение ко мне, как короткий твит, в котором я упоминается один раз. - Мы видим переменную b, которая появляется в знаменателе и умножается на коэффициент длины поля, который мы только что обсуждали. Чем больше b, тем сильнее влияние длины документа по сравнению со средней длиной. Чтобы убедиться в этом, вы можете представить, что если вы установите b равным 0, эффект отношения длины будет полностью аннулирован, и длина документа не будет иметь никакого отношения к счету. По умолчанию b имеет значение 0,75 в Elasticsearch.
- Наконец, мы видим две составляющие оценки, которые проявляются как в числителе, так и в знаменателе: k1 и f(q i ,D). Их внешний вид с обеих сторон затрудняет понимание того, что они делают, просто взглянув на формулу, но давайте быстро перейдем к делу.
- f(q i ,D) — «сколько раз термин запроса i th встречается в документе D?»
Во всех этих документах f(«shane»,D) равно 1, но f(«connelly»,D) различается: 1 для документов 3 и 4, но 0 для документов 1 и 2. Если бы было 5
-й -й документ с текстом «shane shane» будет иметь значение f («shane», D) равное 2. Мы видим, что
f(q i ,D) находится как в числителе, так и в знаменателе, и есть специальный множитель «k1», о котором мы поговорим далее. Если рассматривать f(q i ,D), то чем больше терминов запроса встречается в документе, тем выше будет его оценка. Это имеет интуитивно понятный смысл: документ, в котором наше имя упоминается много раз, с большей вероятностью будет связан с нами, чем документ, в котором оно упоминается только один раз. - k1 — это переменная, которая помогает определить характеристики насыщения частоты термина. То есть он ограничивает, насколько один термин запроса может повлиять на оценку данного документа. Это достигается путем приближения к асимптоте. Вы можете увидеть сравнение BM25 с TF/IDF в этом:
Большее/меньшее значение k1 означает, что наклон кривой «tf() of BM25» изменяется. Это влияет на изменение того, как «термины, встречающиеся больше раз, добавляют дополнительные баллы». Интерпретация k1 заключается в том, что для документов средней длины именно значение частоты термина дает половину максимального балла для рассматриваемого термина. Кривая влияния tf на счет быстро растет, когда tf() ≤ k1, и все медленнее и медленнее, когда tf() > k1.
Продолжая наш пример, с k1 мы контролируем ответ на вопрос «насколько больше должно добавление второго «шейна» к документу способствовать оценке, чем первое или третье по сравнению со вторым?» Более высокий k1 означает, что оценка для каждого термина может продолжать расти относительно больше для большего количества экземпляров этого термина. Значение 0 для k1 будет означать, что все, кроме IDF(q i ) отменяется. По умолчанию k1 имеет значение 1,2 в Elasticsearch.
- f(q i ,D) — «сколько раз термин запроса i th встречается в документе D?»
Пересматривая наш поиск с нашими новыми знаниями
Мы удалим наш индекс людей и воссоздадим его всего с 1 сегментом, чтобы нам не пришлось использовать search_type=dfs_query_then_fetch
. Мы проверим наши знания, установив три индекса: один со значением k1 для 0 и b для 0,5 и второй индекс (люди2) со значением b для 0 и k1 для 10 и третий индекс (люди3) со значением b до 1 и k1 до 5.
УДАЛИТЬ людей ПОСТАВИТЬ людей { "настройки": { "количество_осколков": 1, "индекс" : { "сходство" : { "По умолчанию" : { "тип": "BM25", «б»: 0,5, "к1": 0 } } } } } ПОСТАВИТЬ людей2 { "настройки": { "количество_осколков": 1, "индекс" : { "сходство" : { "По умолчанию" : { "тип": "BM25", "б": 0, «Л1»: 10 } } } } } ПОСТАВИТЬ людей3 { "настройки": { "количество_осколков": 1, "индекс" : { "сходство" : { "По умолчанию" : { "тип": "BM25", "б": 1, «к1»: 5 } } } } }
Теперь добавим несколько документов во все три индекса:
POST люди/_doc/_bulk { "индекс": { "_id": "1" } } { "название": "Шейн" } { "индекс": { "_id": "2" } } { "название": "Шейн Си" } { "индекс": { "_id": "3" } } { "title": "Шейн П. Коннелли" } { "индекс": { "_id": "4" } } { "title": "Шейн Коннелли" } { "индекс": { "_id": "5" } } { "title": "Шейн Шейн Коннелли Коннелли" } { "индекс": { "_id": "6" } } { "title": "Шейн Шейн Шейн Коннелли Коннелли Коннелли" } POST люди2/_doc/_bulk { "индекс": { "_id": "1" } } { "название": "Шейн" } { "индекс": { "_id": "2" } } { "название": "Шейн Си" } { "индекс": { "_id": "3" } } { "title": "Шейн П. Коннелли" } { "индекс": { "_id": "4" } } { "title": "Шейн Коннелли" } { "индекс": { "_id": "5" } } { "title": "Шейн Шейн Коннелли Коннелли" } { "индекс": { "_id": "6" } } { "title": "Шейн Шейн Шейн Коннелли Коннелли Коннелли" } POST люди3/_doc/_bulk { "индекс": { "_id": "1" } } { "название": "Шейн" } { "индекс": { "_id": "2" } } { "название": "Шейн Си" } { "индекс": { "_id": "3" } } { "title": "Шейн П. Коннелли" } { "индекс": { "_id": "4" } } { "title": "Шейн Коннелли" } { "индекс": { "_id": "5" } } { "title": "Шейн Шейн Коннелли Коннелли" } { "индекс": { "_id": "6" } } { "title": "Шейн Шейн Шейн Коннелли Коннелли Коннелли" }
Теперь, когда мы делаем:
ПОЛУЧИТЬ /люди/_поиск { "запрос": { "совпадение": { "название": "Шейн" } } }
Мы видим у людей, что все документы имеют оценку 0,074107975. Это соответствует нашему пониманию установки k1 на 0: для оценки имеет значение только IDF поискового запроса!
Теперь проверим people2, у которого b = 0 и k1 = 10:
ПОЛУЧИТЬ /people2/_search { "запрос": { "совпадение": { "название": "Шейн" } } }
Из результатов этого поиска следует сделать вывод о двух вещах.
Во-первых, мы видим, что результаты упорядочены исключительно по количеству появлений «шейн». Документы 1, 2, 3 и 4 получили «шейн» один раз и, таким образом, имеют одинаковую оценку 0,074107975. Документ 5 имеет «шейн» дважды, поэтому имеет более высокий балл (0,13586462) благодаря f («шейн», D5) = 2, а документ 6 снова имеет более высокий балл (0,18812023) благодаря f («шейн», D6) = 3. Это согласуется с нашей интуицией, когда мы устанавливаем b равным 0 в people2: длина — или общее количество терминов в документе — не влияет на оценку; только количество и релевантность совпадающих терминов.
Во-вторых, следует отметить, что разница между этими оценками нелинейна, хотя для этих 6 документов она кажется довольно близкой к линейной.
- Разница в оценке между NO вхождениями из нашего поискового термина и первым — 0,074107975
- Разница в оценке между добавлением секунды нашего поискового термина, а первая — 0,13586462 — 0,074107975 = 0,06117566664596462 — 0,074107975 = 0,06117566664596462 — 0,074107975 = 0,06117666664596462 — 0,074107975 = 0,0617566666645962 — 0,074107975. разница между добавлением третье вхождение нашего поискового запроса, а второе 0,18812023 — 0,13586462 = 0,05225561
0,074107975 довольно близко к 0,061756645, что очень близко к 0,05225561, но они явно уменьшаются. Причина, по которой это выглядит почти как линейных, заключается в том, что k1 велико. По крайней мере, мы можем видеть, что оценка не увеличивается линейно с дополнительными вхождениями — если бы они были, мы ожидали бы увидеть ту же разницу с каждым дополнительным термином. Мы вернемся к этой идее после проверки людей3.
Теперь проверим people3, у которого k1 = 5 и b = 1:
GET /people3/_search { "запрос": { "совпадение": { "название": "Шейн" } } }
Возвращаем следующие хиты:
"попадания": [ { "_index": "люди3", "_тип": "_doc", "_id": "1", "_score": 0,16674294, "_источник": { "title": "Шейн" } }, { "_index": "люди3", "_тип": "_doc", "_id": "6", "_score": 0,10261105, "_источник": { "title": "Шейн Шейн Шейн Коннелли Коннелли Коннелли" } }, { "_index": "люди3", "_тип": "_doc", "_id": "2", "_score": 0,102611035, "_источник": { "title": "Шейн Си" } }, { "_index": "люди3", "_тип": "_doc", "_id": "4", "_score": 0,102611035, "_источник": { "title": "Шейн Коннелли" } }, { "_index": "люди3", "_тип": "_doc", "_id": "5", "_score": 0,102611035, "_источник": { "title": "Шейн Шейн Коннелли Коннелли" } }, { "_index": "люди3", "_тип": "_doc", "_id": "3", "_score": 0,074107975, "_источник": { "title": "Шейн П. Коннелли" } } ]
Мы можем видеть на примере людей3, что теперь отношение совпадающих терминов («шейн») к несовпадающим — это единственное, что влияет на относительную оценку. Таким образом, такие документы, как документ 3, в котором только 1 термин соответствует из 3 баллов ниже 2, 4, 5 и 6, все из которых соответствуют ровно половине терминов, и все они имеют меньшие баллы, чем документ 1, который точно соответствует документу.
Опять же, мы можем отметить, что существует «большая» разница между документами с наивысшей оценкой и документами с более низкой оценкой для людей2 и людей3. Это благодаря (опять же) большому значению k1. В качестве дополнительного упражнения попробуйте удалить людей2/людей3 и снова установить для них что-то вроде k1 = 0,01, и вы увидите, что оценки между документами с меньшим количеством документов меньше. При b = 0 и k1 = 0,01:
- The score difference between having no occurrences of our search term and the first is 0. 074107975
- The score difference between adding a second occurrence of our search term and the first is 0.074476674 — 0.074107975 = 0.000368699
- The score разница между добавлением третьего вхождения нашего поискового термина и второго составляет 0,07460038 — 0,074476674 = 0,000123706
Таким образом, при k1 = 0,01 мы видим, что влияние оценки каждого дополнительного вхождения падает намного быстрее, чем при k1 = 5 или k1 = 10. 4 9Вхождение 0027-й добавит к счету гораздо меньше, чем 3 -й -й и так далее. Другими словами, при этих меньших значениях k1 показатели термина насыщаются намного быстрее. Как мы и ожидали!
Надеюсь, это поможет увидеть, что эти параметры делают с различными наборами документов. Обладая этими знаниями, мы затем перейдем к тому, как выбрать подходящие b и k1 и как Elasticsearch предоставляет инструменты для понимания оценок и повторения вашего подхода.
Продолжите эту серию: Часть 3: Рекомендации по выбору b и k1 в Elasticsearch
BM25 Артикул
функция ранга bm25
реализует
Окапи БМ25
функция ранжирования, используемая для оценки релевантности текстового документа заданному поисковому запросу.
Это чисто текстовая функция ранжирования, которая работает на
индексированное строковое поле.
Эта функция дешева в вычислении, примерно в 3-4 раза быстрее, чем
родной ранг,
при этом обеспечивая хороший рейтинг качества.
Это хороший кандидат для использования в функции ранжирования первой фазы при ранжировании текстовых документов.
Функция ранжирования
Функция bm25 вычисляет оценку того, насколько хорош запрос с терминами.
q1,…,qn
соответствует индексированному строковому полю t в документе D .
Оценка рассчитывается следующим образом:
∑inIDF(qi)⋅f(qi,D)⋅(k1+1)f(qi,D)+k1⋅(1-b+b⋅field_lenavg_field_len)
Где компоненты в функции:
ЦАХАЛ(ци):
обратная частота документа
( IDF ) условия запроса i в поле t . Это рассчитывается как:log(1+N-n(qi)+0,5n(qi)+0,5)
N — общее количество документов на узле контента.
п (ци)
количество документов, содержащих термин запроса i для поля t ,
который рассчитывается для индекса, существующего для этого поля.
В расчете используется максимальное значение среди индексов,
который обычно исходит из самого большого дискового индекса.Как IDF рассчитывается для узла содержимого и индекса, возможны небольшие отклонения.
Чтобы использовать один и тот же IDF во всех узлах контента, установите его как значение .
по каждому термину запроса с помощью аннотаций.- f(qi,D): количество вхождений (частота терминов) термина запроса i
в поле т документа Д .
Для полей с несколькими значениями мы используем сумму вхождений по всем элементам. - field_len: Длина поля (количество слов) поля t в документе D .
Для полей с несколькими значениями мы используем сумму длин полей по всем элементам. - avg_field_len: средняя длина поля от до среди документов на узле контента.
- k1: параметр, используемый для ограничения того, насколько одно условие запроса может повлиять на оценку для документа D .
При более высоком значении оценка за один термин может продолжать расти относительно больше.
когда существует больше вхождений для этого термина. Значение по умолчанию — 1,2.
Можно настроить с помощью
ранг-свойства. - b: Параметр, используемый для управления влиянием длины поля поля t
по сравнению со средней длиной поля. Значение по умолчанию — 0,75.
Можно настроить с помощью
ранг-свойства.
Пример
В следующем примере у нас есть индексированное строковое поле , содержимое ,
и ранговый профиль с использованием функции ранга bm25 .
Обратите внимание, что поле должно быть включено для использования с функцией bm25.
установив enable-bm25 9флаг 0006 в
индекс
раздел определения поля.