Почему сфинкс не находит результаты по запросу «диван», когда есть сущность «диваны» и он их находит если вбить «диваны»?
Всем привет.
Есть проект на bitrix с каталогом мебели. Есть разделы "Диваны" "Диваны детские" "Диваны угловые" и внутри различные диваны. Каталог проиндексирован sphinx с товарами и разделами.
И ищу только по разделам, без товаров.
1. Если вбиваю "диван", то нет результатов (0).
2. Если вбиваю "дива" получаю выдачу.
3. Вбиваю "диваны" получаю выдачу.
Вопрос почему "диван" не дает результатов? И как это поправить?
index bitrix
{
#main settings
type = rt
path = /var/lib/sphinxsearch/data/bitrix
docinfo = inline
#choose appropriate type of morphology to use
#morphology = lemmatize_ru_all, lemmatize_en_all, lemmatize_de_all, stem_enru
morphology = stem_enru, soundex
#these settings are used by bitrix:search.title component
dict = keywords
prefix_fields = title
infix_fields=
min_prefix_len = 2
enable_star = 1
#all fields must be defined exactly as followed
rt_field = title
rt_field = body
rt_attr_uint = module_id
rt_attr_string = module
rt_attr_uint = item_id
rt_attr_string = item
rt_attr_uint = param1_id
rt_attr_string = param1
rt_attr_uint = param2_id
rt_attr_string = param2
rt_attr_timestamp = date_change
rt_attr_timestamp = date_to
rt_attr_timestamp = date_from
rt_attr_uint = custom_rank
rt_attr_multi = tags
rt_attr_multi = right
rt_attr_multi = site
rt_attr_multi = param
#depends on settings of your site
# uncomment for single byte character set
charset_type = sbcs
# uncomment for UTF character set
#charset_type = utf-8
}
Некорректная кодировка при индексации и поиске: любое нечетное количество русских букв в поиске будет приводить к странным результатам. По-идее исправление charset в коннекте к БД и сфинксу в этом случае может помочь, но это неточно.
Некорректная работа стеммера. Может быть, на конкретном примере "дива, диван, диваны", он приводит к разным нормальным формам. CALL KEYWORDS поможет разобраться, какие основы сфинкс ищет в конкретном случае. Можно попробовать добавить lemmatize_ru_all, но для этого понадобится скачивать словари.