es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir la sintaxis de consulta SphinxSearch en cadena de búsqueda booleana en Ruby.

He estado pensando en cuál es la manera más fácil de convertir la siguiente consulta de Sphinx Search en lo que se usa comúnmente en búsquedas web típicas o portales, por ejemplo, una cadena de búsqueda booleana, y viceversa.

(A | B) “C D” (E | “F G” | “H I J”) (“K L” (“M N” | “O P”)) Q R

Necesita convertirse en:

(A O B) Y “C D” Y (E O “F G” O “H I J”) Y (“K L” Y (“M N” O “O P”)) Y Q Y R

También hay una variación pequeña con fines de ejemplo:

(A | B) C D (E | “F G” | “H I J”) (“K L” (“M N” | “O P”)) Q R

Deberá ser:

(A O B) Y C Y D Y (E O “F G” O “H I J”) Y (“K L” Y (“M N” O “O P”)) Y Q Y R

Para mayor claridad, “A” puede ser cualquier palabra y cualquier caso, no distingue entre mayúsculas y minúsculas. Los espacios denotan un Y en la sintaxis de inicio a menos que estén entre comillas. Por lo tanto, AB simplemente sería una palabra como Java. El espacio entre (A|B) no es importante, (A|B) es lo mismo que (A|B) o (A | B), etc. Cada letra denota una palabra.

Algunas de estas consultas serán bastante largas, hasta 500 términos. Aunque esto no es una sobrecarga muy grande para procesar, estoy pensando cuál sería la MEJOR (más eficiente) forma de convertirlo. ¿Tokenización, expresiones regulares/correspondencia de patrones, reemplazo simple, recursión, etc.? ¿Qué recomendarían ustedes?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La mejor manera de convertir esta consulta sería utilizar una combinación de tokenización y coincidencia de patrones/regex. La tokenización te permitiría dividir la consulta en palabras y frases individuales, mientras que la coincidencia de patrones/regex te permitiría identificar los operadores booleanos y agrupaciones. Esto te permitiría convertir rápida y precisamente la consulta en el formato deseado. Además, podrías usar una simple sustitución para convertir rápidamente los operadores booleanos de la sintaxis de búsqueda de Sphinx a la cadena de búsqueda booleana más comúnmente utilizada.

Comments are closed.