Después de una pregunta publicada aquí acerca de cómo puedo aumentar la velocidad en uno de mis métodos de búsqueda SQL, me recomendaron actualizar mi tabla para hacer uso de la búsqueda de texto completo. Esto es lo que he hecho ahora, usando índices Gist para hacer búsquedas más rápido. En algunas de las consultas "simples" he notado un aumento marcado del cual estoy muy contento.PostgreSQL: Búsqueda de texto completo - ¿Cómo buscar palabras parciales?
Sin embargo, estoy teniendo dificultad en la búsqueda de palabras parciales. Por ejemplo, tengo varios registros que contienen la palabra Squire (454) y tengo varios registros que contienen Squirrel (173). Ahora, si busco Squire, solo devuelve los 454 registros, pero también quiero que devuelva los registros de Squirrel.
Mi consulta es el siguiente
SELECT title
FROM movies
WHERE vectors @@ to_tsoquery('squire');
pensé que podía hacer to_tsquery('squire%')
pero eso no funciona.
¿Cómo hago para buscar coincidencias parciales?
Además, en mi base de datos tengo registros que son películas y otros que son simplemente programas de televisión. Estos se diferencian por el "sobre el nombre, así que como" Munsters "es un programa de televisión, mientras que The Munsters es la película del espectáculo. Lo que quiero hacer es buscar solo el programa de televisión Y solo las películas. ¿Alguna idea sobre cómo puedo lograr esto?
Saludos Anthoni
Si tiene la clave de búsqueda 'squire' pero quiere obtener el resultado' squirrel', es posible que deba especificar restricciones adicionales. Porque de lo contrario uno podría argumentar que tenían la clave de búsqueda 'mama' pero querían el resultado' rabbit'. Entonces quizás quieras cortar la clave de búsqueda y convertir 'squire' en' s | sq | squ | squi | Squir | squire' ... Este o más algoritmos le darán la 'ardilla'.Creo que la respuesta de @Joshua Burns contiene una solución más genérica que la mía, si quieres ser genérico. –