2008-11-25 10 views
6

Para el último par de horas que he estado jugando con todo tipo de variaciones diferentes de búsqueda de texto completo de SQL Server. Sin embargo, todavía no puedo entender cómo funciona la clasificación. Me he encontrado con un par de ejemplos que realmente me confunden sobre su rango más alto que otros. Por ejemploRanking de búsqueda de texto completo (SQL Server)

Tengo una tabla con 5 cols + más que no están indexadas. Todos son campos nvarchar.

Me postulo esta consulta (Bueno, casi .. Me volver a teclear con diferentes nombres)

SET @SearchString = REPLACE(@Name, ' ', '*" OR "') --Splits words with an OR between 
SET @SearchString = '"'[email protected]+'*"' 
print @SearchString; 

SELECT ms.ID, ms.Lastname, ms.DateOfBirth, ms.Aka, ms.Key_TBL.RANK, ms.MiddleName, ms.Firstname 
FROM View_MemberSearch as ms 
INNER JOIN CONTAINSTABLE(View_MemberSearch, (ms.LastName, ms.Firstname, ms.MiddleName, ms.Aka, ms.DateOfBirth), @SearchString) AS KEY_TBL 
    ON ms.ID = KEY_TBL.[KEY] 
WHERE KEY_TBL.RANK > 0 
ORDER BY KEY_TBL.RANK DESC; 

Por lo tanto si busco 11/05/1964 John Jackson me gustaría tener "11/05/1964" O "JOHN *" o "* JACKSON" y estos resultados:

ID -- First Name -- Middle Name -- Last Name -- AKA -- Date of Birth -- SQL Server RANK 
---------------------------------------------------------------------------------- 
1 | DAVE  | JOHN  | MATHIS  | NULL | 11/23/1965 | 192 
2 | MARK  | JACKSON  | GREEN  | NULL | 05/29/1998 | 192 
3 | JOHN  | NULL  | JACKSON | NULL | 11/05/1964 | 176 
4 | JOE  | NULL  | JACKSON | NULL | 10/04/1994 | 176 

Así que finalmente mi pregunta. No veo cómo la fila 1 y 2 se clasifican por encima de la fila 3 y por qué la fila 3 se clasifica igual que la fila 4. La fila 2 debería tener el rango más alto ya que la cadena de búsqueda también coincide con el nombre y el apellido como la fecha de nacimiento.

Si cambio el OR a Y no obtengo ningún resultado.

Respuesta

6

que he encontrado cláusulas AND y OR Don' aplicar en columnas Cree una vista indizada que combine las columnas y obtendrá mejores resultados. Mira mis preguntas pasadas y encontrarás información que combina tu situación.

También he encontrado que es mejor que no agregue un '*'. Pensé que aparecerían más coincidencias, pero tendía a arrojar resultados peores (especialmente para palabras largas). Como término medio, solo puede agregar un * a palabras más largas.

El caso de ejemplo que das es definitivamente extraño.

+0

cómo combinar las columnas y utilizar exactamente?tengo el mismo problema – zsharp

+0

¿Es mejor tener una columna calculada y tener un índice de texto completo en esa columna que tener que buscar en columnas separadas? – user636525

1

¿Qué pasa si se quita los criterios Dob?

MS de búsqueda de texto completo es realmente un cuadro negro que es difícil de entender y personalizar Más o menos, tomar como es, a diferencia de Lucene es ideal para la personalización

1

Gracias chicos.

Frank, usted tenía razón en que AND y OR no van por las columnas, esto fue algo que no noté al principio.

Para obtener los mejores resultados, tuve que fusionar las 5 columnas en 1 columna en una vista. Luego busca en esa sola columna. Al hacerlo, me dio los resultados exactos que quería sin extras.

Mi cadena de búsqueda real después de la conversión terminó siendo "Palabra1 *" y "* Palabra2"

Utilizando el signo% todavía no hizo lo que MSDN dijo que debería hacer. Es decir, si busqué la palabra josh y se cambió a "Josh%" cuando busqué, "Joshua" no se encontró. Bastante tonto sin embargo con "Josh *" entonces joshua sería encontrado.

Cuestiones relacionadas