Digamos que usted tiene un Postgres 8.3 tabla como sigue:¿Cómo se hace la búsqueda de texto completo basada en frases en postgres que aprovecha el índice de texto completo?
CREATE TABLE t1 (body text, body_vector tsvector);
Quiero ser capaz de buscar por frases utilizando el índice de texto completo (GIST, ginebra o ambos en la columna de la tsvector). La mejor solución que he podido encontrar es primero hacer la búsqueda de texto completo en ambas palabras (AND booleano) y luego hacer una comparación similar en el cuerpo de la frase. Por supuesto, esto no captura ninguna derivación o revisión ortográfica que la búsqueda de texto completo de postgres haga por usted. Un ejemplo de esto es si estoy en busca de la frase 'W1 W2', que haría uso:
SELECT * FROM t1 WHERE body_vector @@ 'w1 & w2'::tsquery AND body LIKE 'w1 w2';
¿Hay una manera de hacer esto en el que no tiene que recurrir a buscar en la columna de texto?
Tal vez no haya detectado algo, ¿pero esto no requiere que la cadena de entrada contenga la frase buscada entre comillas simples? ¿Cómo podría alguien usarlo en general, cuando la frase proviene de la entrada auser, y el documento proviene de una columna de la base de datos? –
Esto todavía no es "búsqueda de frase". Eso solo funciona, ya que su frase de tsvector 'nueva york' está envuelta entre comillas simples. – soyayix
Sí, ambas funciones sí lo hacen, pero su cadena de tsvector en la mayoría de los casos no tendrá comillas simples. Si lo hace, ¿cuál es la frase de búsqueda para ... Tengo un postgreSQL 9.4 y la consulta que tiene funciona? Esto no es solo específico para 9.6. seleccione 'i heart new york city' :: tsvector @@ 'nuevo' :: tsquery, - verdadero 'i heart new york city' :: tsvector @@ 'new & york' :: tsquery, - true 'i heart new york city' :: tsvector @@ '' 'new york' '' :: tsquery --false – soyayix