2011-05-19 11 views
6

Estoy implementando la búsqueda de sphinx en mi aplicación de rieles.
Quiero buscar con fuzzy on. Debe buscar errores ortográficos, por ejemplo, si se ingresa la consulta de búsqueda charact * a * ristics, debe buscar charact * e * ristics.Pensando en la búsqueda fugaz de la esfinge?

Cómo debería implementar esta

Respuesta

6

Sphinx no permite, naturalmente, los errores ortográficos, no importa si las palabras están escritas correctamente o no, simplemente las indexa y las combina.

Existen dos opciones: utilizar thinking-sphinx-raspell para detectar los errores ortográficos de los usuarios cuando realizan búsquedas y ofrecerles la opción de buscar nuevamente con una consulta mejorada (al igual que Google); o tal vez use las morfologías soundex o metafónicas para que las palabras estén indexadas de una manera que explique cómo suenan. Buscar en this page para la derivación, encontrará la sección correspondiente. También tenga una lectura de Sphinx's documentation sobre el asunto también.

No tengo idea de qué tan confiable sería cualquiera de las opciones - personalmente, optaría por el n. ° 1.

+0

Gracias Pat, I pensó en utilizar raspell, pero no se adapta a mi re requisitos. Estoy leyendo el contenido del correo electrónico y buscando posibles nombres de productos ordenados a través del correo electrónico. No tengo manera de sugerir al usuario con las opciones corregidas.Y con raspell sucede que reemplaza algunos nombres abreviados por alternativas irrelevantes como led (LED) reemplazado por tapa. Intenté con soundex y metaphone también, mejoró los resultados pero no fue preciso. – Pravin

2

Sí, Sphinx siempre usa los modos de coincidencia extendida.

Hay los siguientes modos de juego disponibles:

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. 

se utilizó SPH_MATCH_EXTENDED2 durante 0.9.8 y 0.9.9 ciclo de desarrollo, cuando el motor de emparejamiento interno estaba siendo reescrito (en aras de la funcionalidad adicional y mejor actuación). Con la versión 0.9.9, se eliminó la versión anterior y SPH_MATCH_EXTENDED y SPH_MATCH_EXTENDED2 ahora son solo alias.

enable_star

Permite la estrella de sintaxis (o sintaxis de comodín) cuando se busca a través de prefijo/índices infijos. > Opcional, el valor predeterminado es 0 (no usa sintaxis de comodín), para compatibilidad con 0.9.7. > Valores conocidos son 0 y 1.

Por ejemplo, supongamos que el índice se construye con infijos y que enable_star: 1. La búsqueda debe funcionar de la siguiente manera:

"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). 

Ejemplo:

enable_star = 1

Cuestiones relacionadas