Возникла следующая проблема. В проекте используется Sphinx. Поиск осуществляется с постфиксной звездочкой. Для увеличения ранга документов с точным соответствием запросу используется паттерн типа:
@title дом* | @title дом
Для ранжирования используется sph04. Было замечено, что на слове «дом», вес фразы «Дом для богатых» оказался выше веса слова «Дом». Результат ранжирования портит метрика bm25, входящая в состав sph04. Если ориентироваться на
How Sphinx relevance ranking works, то для bm25 выполняется следующее допущение:
"...for performance reasons we account for all the keywords occurrences in the document, and not just the matched ones. For instance, (@ title “hello world”) query that only matches a single instance of “hello world” phrase in the title will result in the same BM25 with a (hello world) query that matches all the instances of both keywords everywhere in the document.".
Ниже приведены два запроса с метрикой bm25. Оба запроса ищут слово «дом», но один ищет в title_star, а второй в description_star. Несмотря на это, результаты одинаковые:
mysql> SELECT id, weight() FROM catalogue
-> WHERE MATCH('@(title_star) дом') AND subsite_ids IN (110) AND paid_type_index IN (0) AND id IN (859490, 842300)
-> LIMIT 0, 20
-> OPTION index_weights=(catalogue=1), max_matches=10000, ranker=expr('bm25');
+--------+----------+
| id | weight() |
+--------+----------+
| 842300 | 700 |
| 859490 | 669 |
+--------+----------+
2 rows in set (0.00 sec)
mysql> SELECT id, weight() FROM catalogue
-> WHERE MATCH('@(description_star) дом') AND subsite_ids IN (110) AND paid_type_index IN (0) AND id IN (859490, 842300)
-> LIMIT 0, 20
-> OPTION index_weights=(catalogue=1), max_matches=10000, ranker=expr('bm25');
+--------+----------+
| id | weight() |
+--------+----------+
| 842300 | 700 |
| 859490 | 669 |
+--------+----------+
2 rows in set (0.01 sec)
Считаем количество слов «дом» в контенте:
- 84230 (Дом для богатых) == 8
- 85949 (Дом) == 3
Т.е. поиск происходит по всем полям, по которым доступен полнотекстовый поиск в рамках одного индекса. Значит ли это, что вклад в значения веса для результатов поиска по title добавляют и слова, которые присутствуют в description?
Заметил еще штуку, что несмотря на одинаковые значения, количество результатов различается. Значит ли это, что в случае, когда мы ищем по title во всех результатах должен быть «дом» в title?
P.S. Вопрос задавал на форуме sphinxsearch, но там тишина