Мислите ли за размито търсене на сфинкс?

Внедрявам sphinx търсене в моето rails приложение.
Искам да търся с включен fuzzy. Трябва да търси правописни грешки, например ако въведете заявка за търсене charact*a*ristics, трябва да търси charact*e*ristics.

Как трябва да приложа това


person Pravin    schedule 19.05.2011    source източник


Отговори (3)


Sphinx естествено не допуска правописни грешки - не се интересува дали думите са написани правилно или не, той просто ги индексира и ги съпоставя.

Има две опции около това - или използвайте thinking-sphinx-raspell за улавяне на правописни грешки от потребителите, когато търсят, и им предлагаме избор да търсят отново с подобрена заявка (подобно на Google); или може би използвайте морфологиите soundex или metaphone, така че думите да се индексират по начин, който отчита как звучат. Потърсете на тази страница за корени, ще намерите съответния раздел. Прочетете и документацията на Sphinx по въпроса.

Нямам представа колко надеждни биха били двата варианта - лично аз бих избрал №1.

person pat    schedule 20.05.2011
comment
Благодаря Пат, мислех да използвам raspell, но не отговаря на изискванията ми. Чета съдържанието на имейла и търся възможни имена на продукти, поръчани чрез имейла. Нямам начин да предложа на потребителя коригирани опции. И с raspell се случва да замени някои съкратени имена с неподходящи алтернативи като led(LED), заменен с капак. Опитах и ​​със soundex и metaphone, подобри резултатите за мен, но не е точно. - person Pravin; 20.05.2011

По подразбиране Sphinx не обръща никакво внимание на търсенето със заместващи знаци с помощта на звездичка. Можете обаче да го включите:

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

Вижте http://pat.github.io/thinking-sphinx/advanced_config.html Синтаксис със заместващи знаци/звезда.

person Anton    schedule 19.05.2011

Да, 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

person Pankhuri    schedule 10.08.2013