tutnet
@tutnet
Специалист по материализации ожиданий

Ранжирование по нескольким факторам в том числе и по зонам в Sphinx. Как сделать правильно?

Имеется индекс из заголовка и html-текста, из важного в конфиге для него прописано следующее:
min_infix_len = 3
html_strip	= 1
index_zones = h*, b, title, szone*
index_exact_words = 1

Стоит задача ранжировать выдачу по нескольким факторам:

1а. Полное вхождение в заголовок - наибольший вес
1б. Частичное вхождение в заголовок не менее 60% запроса(т/е одно слово из двух не подходит)
2а. Полное вхождение в тексте с внутренним ранжированием по зонам. Зоны задаются множеством тегов включая кастомные( т/е index_zones = h*, b, title, szone*)
2б. Аналогично 1б для текста с учетом зон
3. Остальные частичные вхождения в заголовок
4. Остальные частичные вхождения в текст

Пунктами 3 и 4 можно пренебречь(т/е не включать их в выдачу)

Для запросов к сфинксу из кода использую:
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
     $cl->SetRankingMode(SPH_RANK_SPH04); 
     $cl->SetFieldWeights(array('name' => 15, 'long_text' => 5));

Это фактически решает поднятие в выдаче полного вхождения в заголовок и очень слабо влияет на остальные пункты.

Основные вопросы:
1. Как включить в ранжирование зоны?
2. Как будет работать это ранжирование для вложенных тегов (если например h1 будет внутри szone10)?
3. Как при ранжировании учесть частичное вхождение большей части лексем запроса?
  • Вопрос задан
  • 3822 просмотра
Решения вопроса 1
@portfelio
Надеюсь, что не сильно вас обижу, если предложу выкинуть клиентскую библиотеку и начать писать на SphinxQL? Нативное обращение уменьшает накладные расходы, превнося бОльшую гибкость в логику вашего кода.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы