Вес результатов Sphinxsearch с разными ранжирами

#sphinx

#sphinx

Вопрос:

У меня есть один индекс «name_and_title_index» с двумя полями «name» и «title».

Indext дает мне эту информацию по заинтересованным ключевым словам:

 keyword ,docs    ,hits    ,offset
word7   ,56      ,57      ,519386707
word8   ,154     ,161     ,475390304
word2   ,2438    ,2597    ,14258546
word3   ,26599   ,29074   ,68018978
word5   ,475349  ,656569  ,191390685
word1   ,645079  ,881965  ,303666122
word6   ,1089457 ,1435180 ,350540391
  

indexed_documents — 10742342, общее количество ключевых слов — 1379888

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

Я ожидаю, что любой результат с word7 будет иметь больший вес (всего 56 документов из 10,7Млн)

SphinxQL — это:

 SELECT 
    ID, 
    WEIGHT(), 
    SNIPPET(name, 'word1 word2 word3 word4 word5 word6') AS _name, 
    SNIPPET(title, 'word7 word8 word9') AS _title 
FROM 
    name_and_title_index 
WHERE 
    MATCH('@name "word1 word2 word3 word4 word5 word6"/0.5 @title "word7 word8 word9"/0.5')
  

Разные ранжиры дают мне следующие результаты:

 RANKER=PROXIMITY_BM25;

| 1 | 6546 | _ <b>word6</b> <b>word1</b> <b>word2</b> <b>word3</b>         | _ _ <b>word8</b> _ _ <b>word7</b>    |
| 4 | 6528 | _ _ _ _ _ _ _ _ <b>word2</b> <b>word3</b> <b>word4</b> _      | _ _ <b>word8</b> _ _ _ _ _ ...       |
| 2 | 4521 | <b>word5</b> <b>word6</b> _ _ _ _ _ _ <b>word1</b> _ _        | _ <b>word7</b> _ _ _ _ _ _ _ _ ...   |
| 3 | 4520 | <b>word5</b> _ <b>word1</b> _ _ _ _ _ <b>word6</b> _ _        | _ _ _ _ _ _ _ _ _ _ _ _ <b>word7</b> |
| 5 | 4519 | <b>word1</b> _ _ _ _ _ <b>word5</b> <b>word6</b> _ _ _ _      | _ _ _ _ _ _ <b>word8</b> _ _ _ _ _ _ |
| 6 | 2520 | <b>word5</b> _ _ _ _ _ ... _ _ _ _ <b>word6</b> _ _ _ _ _ ... | ... _ _ _ _ _ _ _ <b>word8</b> _ _   |


RANKER=BM25;

| 1 | 2546 | _ <b>word6</b> <b>word1</b> <b>word2</b> <b>word3</b>         | _ _ <b>word8</b> _ _ <b>word7</b>    |
| 4 | 2528 | _ _ _ _ _ _ _ _ <b>word2</b> <b>word3</b> <b>word4</b> _      | _ _ <b>word8</b> _ _ _ _ _ ...       |
| 2 | 2521 | <b>word5</b> <b>word6</b> _ _ _ _ _ _ <b>word1</b> _ _        | _ <b>word7</b> _ _ _ _ _ _ _ _ ...   |
| 3 | 2520 | <b>word5</b> _ <b>word1</b> _ _ _ _ _ <b>word6</b> _ _        | _ _ _ _ _ _ _ _ _ _ _ _ <b>word7</b> |
| 5 | 2520 | <b>word1</b> _ _ _ _ _ <b>word5</b> <b>word6</b> _ _ _ _      | _ _ _ _ _ _ <b>word8</b> _ _ _ _ _ _ |
| 6 | 2519 | <b>word5</b> _ _ _ _ _ ... _ _ _ _ <b>word6</b> _ _ _ _ _ ... | ... _ _ _ _ _ _ _ <b>word8</b> _ _   |



RANKER=SPH04;

| 4 | 16528 | _ _ _ _ _ _ _ _ <b>word2</b> <b>word3</b> <b>word4</b> _      | _ _ <b>word8</b> _ _ _ _ _ ...       |
| 1 | 14546 | _ <b>word6</b> <b>word1</b> <b>word2</b> <b>word3</b>         | _ _ <b>word8</b> _ _ <b>word7</b>    |
| 2 | 14521 | <b>word5</b> <b>word6</b> _ _ _ _ _ _ <b>word1</b> _ _        | _ <b>word7</b> _ _ _ _ _ _ _ _ ...   |
| 3 | 14520 | <b>word5</b> _ <b>word1</b> _ _ _ _ _ <b>word6</b> _ _        | _ _ _ _ _ _ _ _ _ _ _ _ <b>word7</b> |
| 5 | 14519 | <b>word1</b> _ _ _ _ _ <b>word5</b> <b>word6</b> _ _ _ _      | _ _ _ _ _ _ <b>word8</b> _ _ _ _ _ _ |
| 6 | 10520 | <b>word5</b> _ _ _ _ _ ... _ _ _ _ <b>word6</b> _ _ _ _ _ ... | ... _ _ _ _ _ _ _ <b>word8</b> _ _   |
  

Почему результат 4 всегда выше, чем результат 2 и 3 (а с SPH04 он выше, чем результат 1)?

Комментарии:

1. Вы пробовали использовать packedfactors() функцию для извлечения подробной информации о ранжировании для каждого документа? Это может помочь объяснить некоторые детали.

2. Для bm25 (поскольку packedfactors() работает, только если указан ранкер выражения) я получаю: word0 = (tf = 0, idf = 0.009163), word1 = (tf = 1, idf = 0.011779), word2 = (tf = 1, idf = 0.011624), word3 = (tf = 1, idf = 0.014978), word5 = (tf = 0, idf = 0.009976), word6 = (tf = 0, idf = 0.010907), word7 = (tf = 0, idf = 0.017064), word10 = (tf = 1, idf = 0.015675) Здесь слово # != слово #из совпадения. И ни один из этих idf не приближается к тому, что я ожидаю для ключевого слова с 56 документами из 10,7M.

3. Вы читали о опции «idf»? Вы можете изменить способ вычисления idf sphinxsearch.com/docs/current.html#sphinxql-select по устаревшим причинам он может использовать нетрадиционный алгоритм.