Pregunta

Estamos usando SQL Server 2005 en un proyecto.Los usuarios del sistema tienen la capacidad de buscar algunos de los objetos mediante el uso de 'palabras clave'.La forma en que aplicamos esto es mediante la creación de un catálogo de texto completo para el importante columnas de cada tabla puede contener estas "palabras clave" y, a continuación, utilizando CONTIENE a la búsqueda de las palabras clave que el usuario introduce en el cuadro de búsqueda en el índice.

Así, por ejemplo, digamos que usted tiene el objeto de Película, y desea permitir que el usuario de búsqueda para las palabras clave en el título y el cuerpo del artículo, tendríamos índice tanto en el Título y la Trama de la columna y, a continuación, hacer algo como:

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)

(Es un poco más avanzado que el, pero nada terriblemente complejo)

Algunos usuarios añadir números a su búsqueda, así que por ejemplo quieren encontrar 'Terminator 2'.El problema aquí es que, que yo sepa, de forma predeterminada, SQL Server no índice de palabras cortas, por lo tanto haciendo una búsqueda como esta:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"')

en realidad es equivalente a hacer esto:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2'

y estamos recibiendo una gran cantidad de falsos resultados.

Es allí una manera de forzar a SQL Server en el índice pequeñas palabras?Preferiblemente, prefiero índice sólo los números como 1, 2, 21, etc.No sé donde para definir los criterios de indexación, o incluso si es posible ser tan específica como la que.


Bien, yo hice eso, quita el "ruido de palabras" de la lista, y ahora el comportamiento es un poco diferente, pero aún así no lo que cabría esperar.

Una búsqueda no para de "Terminator 2" (sólo estoy haciendo esto, mi empleador no puede ser realmente feliz si puedo revelar lo que estamos haciendo...de todos modos, los términos son un poco diferentes, pero el principio de la misma), no entiendo nada, pero sé que hay objetos que contengan las dos palabras.

Tal vez estoy haciendo algo mal?He quitado todos los números del 1 de ...9 de mi ruido de configuración para SPA, ENU y NEU (neutral), regenera los índices, y trató de la búsqueda.

¿Fue útil?

Solución

Estas "pequeñas palabras" son considerados "el ruido de las palabras" por el índice de texto completo.Puede personalizar la lista de palabras irrelevantes.Este blog proporciona más detalles.Usted necesita para repoblar el índice de texto completo cuando cambie el ruido de las palabras de archivos.

Otros consejos

Yo sabía sobre el ruido de las palabras de archivos, pero no tengo por qué su "Terminator 2" ejemplo sigue dando problemas.Es posible que desee probar preguntando esto en el MSDN Motor de Base de datos del foro donde las personas que se especializan en este tipo de cosas para pasar el rato.

Usted puede combinar CONTIENE (o CONTAINSTABLE) con simple donde las condiciones:

SELECT * FROM Películas DONDE CONTIENE(Título, '"Terminator 2"') y el Titulo like '%Terminator 2%'

Mientras que la CONTIENE encontrar todos Terminator donde va a eliminar de 'Terminator 1'.

Por supuesto, el motor es lo suficientemente inteligente como para empezar con los CONTIENE no como condición.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top