2011-01-18 33 views
6

Soy nuevo en SQL Server Full Text Searching y trato de encontrar la mejor manera de buscar en varias palabras usando el motor de inflexión para que la búsqueda use las diversas formas de todas las palabras.Búsqueda de texto completo de SQL Server usando CONTAINS, FORMSOF, NEAR para varias palabras de búsqueda

Según lo que he leído, FREETEXT usa un OR implícito cuando se usa con varias palabras. Quiero una AND para que los resultados de la búsqueda contengan todas las palabras, por lo que elijo CONTAINS.

Estoy tratando de hacer algo como la siguiente consulta, que utiliza FORMSOF con la palabra clave near near para varias palabras. Tenga en cuenta que esto no es una sintaxis válida y devuelve un error:

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)') 

Sin embargo, la consulta a continuación las obras, pero no se sabe si da los resultados esperados. ¿Hay alguna diferencia entre "AND" y "NEAR" con SQL Full Text Search?

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)') 

Creo que lo que estoy preguntando es, ¿hay una manera de utilizar CONTIENE, FORMSOF, y NEAR con múltiples palabras de búsqueda? ¿O debería usar la segunda consulta anterior que usa "Y"?

Respuesta

9

A partir de los documentos:

<proximity_term> ::= 
    { <simple_term> | <prefix_term> } 
    { { NEAR | ~ } 
    { <simple_term> | <prefix_term> } 
    } [ ...n ] 

Esto significa que puede utilizar NEAR predicado para el (posible) con el prefijo palabras, frases y sus combinaciones.

Dado que los términos de búsqueda se descienden usando reglas muy simples, sólo puede utilizar prefijos:

SELECT * 
FROM content 
WHERE CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*') 

o utilizar AND y hacer de filtro fino en el lado del cliente

SELECT * 
FROM ft 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")') 
Cuestiones relacionadas