Думаешь, сфинкс нечеткий поиск? - PullRequest
6 голосов
/ 19 мая 2011

Я использую поиск sphinx в моем приложении rails.
Я хочу искать с включенным нечетким.Он должен искать орфографические ошибки, например, если вводить поисковый запрос charact * a * ristics, он должен искать charact * e * ristics.

Как мне реализовать это

Ответы [ 3 ]

6 голосов
/ 20 мая 2011

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

Есть два варианта: либо используйте thinking-sphinx-raspell, чтобы отследить орфографические ошибки пользователей при поиске, и предложить им возможность поиска снова с улучшенным запросом (так же, как это делает Google); или, может быть, использовать морфологию soundex или метафона, чтобы слова были проиндексированы таким образом, чтобы объяснить, как они звучат. Поищите на этой странице , вы найдете соответствующий раздел. Также прочитайте документацию Сфинкса по этому вопросу.

Я понятия не имею, насколько надежным будет любой из этих вариантов - лично я бы выбрал №1.

3 голосов
/ 19 мая 2011

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

development:
  enable_star: true
  # ... repeat for other environments

См. http://pat.github.io/thinking-sphinx/advanced_config.html Подстановочный знак / Звездный синтаксис раздел.

2 голосов
/ 10 августа 2013

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

Доступны следующие подходящие режимы:

SPH_MATCH_ALL, matches all query words (default mode);
SPH_MATCH_ANY, matches any of the query words;
SPH_MATCH_PHRASE, matches query as a phrase, requiring perfect match;
SPH_MATCH_BOOLEAN, matches query as a boolean expression (see Section 5.2, “Boolean query syntax”);
SPH_MATCH_EXTENDED, matches query as an expression in Sphinx internal query language (see Section 5.3, “Extended query syntax”);
SPH_MATCH_EXTENDED2, an alias for SPH_MATCH_EXTENDED;
SPH_MATCH_FULLSCAN, matches query, forcibly using the "full scan" mode as below. NB, any query terms will be ignored, such that filters, filter-ranges and grouping will still be applied, but no text-matching.

SPH_MATCH_EXTENDED2 использовался во время цикла разработки 0.9.8 и 0.9.9, когда был переписан механизм внутреннего сопоставления (для обеспечения дополнительной функциональности и повышения производительности). В версии 0.9.9 более старая версия была удалена, а SPH_MATCH_EXTENDED и SPH_MATCH_EXTENDED2 теперь являются просто псевдонимами.

enable_star

Включает звездный синтаксис (или подстановочный синтаксис) при поиске по индексам префикса / инфикса. > Необязательно, по умолчанию - 0 (не используйте подстановочный синтаксис) для совместимости с 0.9.7. > Известные значения: 0 и 1.

Например, предположим, что индекс был создан с инфиксами и что enable_star равен 1. Поиск должен работать следующим образом:

"abcdef" query will match only those documents that contain the exact "abcdef" word in them.
"abc*" query will match those documents that contain any words starting with "abc" (including the documents which contain the exact "abc" word only);
"*cde*" query will match those documents that contain any words which have "cde" characters in any part of the word (including the documents which contain the exact "cde" word only).
"*def" query will match those documents that contain any words ending with "def" (including the documents that contain the exact "def" word only).

Пример:

enable_star = 1

...