Включение частичных совпадений слов в Sphinx?

#php #sphinx

#php #sphinx

Вопрос:

Я новичок в Sphinx и пытаюсь правильно настроить его. Я хочу разрешить частичное совпадение слов для всех поисковых запросов и не хочу, чтобы пользователям приходилось вводить подстановочные знаки самостоятельно.

Я хочу, чтобы поиск функционировал как на Amazon или Google, где, если вы начнете вводить слово, появятся предложения. Так, например, если кто-то ввел «x», должны появиться совпадения типа «Xbox».

Вот настройки индекса, которые у меня есть в настоящее время:

 min_word_len   = 1
min_prefix_len = 1
prefix_fields = name
charset_type = utf-8
  

Что касается PHP, я использую SPH_MATCH_EXTENDED2 и SPH_SORT_RELEVANCE . Я оставил режим ранжирования по умолчанию, что бы это ни было. Казалось, что эти настройки обеспечивают наилучшие результаты поиска, когда я изменил настройки на основе проб и ошибок.

Я читал похожие вопросы здесь и на других сайтах, но ответы, похоже, всегда ссылаются enable_star на то, что, по словам документации, устарело.

Итак, мой вопрос в том, как мне включить частичные совпадения слов в Sphinx? Должен ли я просто добавлять * к каждому слову в пользовательском запросе, делая что-то вроде этого?

 $search = str_replace(' ', '* ', trim($search))   '*';
  

Ответ №1:

Вы можете установить expand_keywords = 1 , как описано в документации.

На самом деле это в значительной степени просто добавляет звезды для вас автоматически — таким образом, что в целом точные совпадения будут оцениваться немного выше, чем чистые совпадения «части».