2009-06-01 10 views
6

Estoy tratando de implementar una característica similar a las "Preguntas relacionadas" en Stackoverflow.¿Cuál es el SQL utilizado para hacer una búsqueda similar a "Preguntas relacionadas" en Stackoverflow

¿Cómo hago para escribir la declaración SQL que buscará en el campo Título y resumen de mi base de datos para preguntas similares?

Si mis preguntas son: "¿Qué es el SQL utilizado para hacer una búsqueda similar a" Preguntas relacionadas "en Stackoverflow".

Los pasos que puedo pensar son;

  1. Strip Las comillas
  2. Dividir la frase en una matriz de palabras y ejecutar una búsqueda SQL en cada palabra.

Si lo hago de esta manera, supongo que no obtendré ningún resultado significativo. No estoy seguro de si la búsqueda de texto completo está habilitada en el servidor, entonces no la estoy usando. ¿Habrá una ventaja de usar Full Text Search?

me encontré con una pregunta similar, pero no hubo respuesta: similar question

Uso de SQL 2005

Respuesta

1

Después de habilitar la búsqueda de texto completo en mi servidor SQL 2005, estoy utilizando el siguiente procedimiento almacenado para buscar texto.

ALTER PROCEDURE [dbo].[GetSimilarIssues] 
(
@InputSearch varchar(255) 
) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

DECLARE @SearchText varchar(500); 

SELECT @SearchText = '"' + @InputSearch + '*"' 

SELECT PostId, Summary, [Description], 
Created 
FROM Issue 

WHERE FREETEXT (Summary, @SearchText); 
END 
1

Probablemente correspondientes basándose en las etiquetas que se agregan a las preguntas ...

+4

El cuadro de diálogo de preguntas relacionadas aparece cuando ingresa un título, no etiquetas. –

+0

Es cierto que buscan el título de palabras "únicas". Probablemente filtran palabras como "cómo", "el", "qué", etc. y buscan el resto de las palabras en otros títulos mientras no tienen en cuenta las posiciones de las palabras. Pero probablemente también busquen esas palabras únicas en las etiquetas, esas coincidencias son probablemente más valoradas en los resultados de búsqueda. – Ropstah

-4

El SQL muy bien puede ser solo "SELECCIONAR * FROM preguntas;". Me resulta difícil imaginar que el algoritmo para encontrar preguntas similares se implemente en SQL.

+0

Es cierto, pero algo más constructivo ayudaría aquí. Como lo demuestran las otras respuestas, un motor de texto completo realmente ayudaría a hacer el trabajo. –

0

Estoy bastante seguro de que sería más eficiente implementar la función en función de las etiquetas asociadas a cada publicación.

+1

Excepto por el hecho de que realiza la búsqueda antes de ingresar las etiquetas. –

0

Probablemente se haga usando una búsqueda de texto completo que coincida con palabras o frases. Lo he usado en MySQL y SQL Server con un éxito decente con la funcionalidad lista para usar.

Puede encontrar más información sobre las búsquedas de texto completo de MySQL en:

http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

O simplemente google búsqueda de texto completo y encontrará una gran cantidad de información.

0

Busca la palabra clave según el título que ingrese, consultando los títulos y el contenido de otras preguntas. Probablemente sea más fácil (y más apropiado) hacer en Lucene (o similar) que en una base de datos relacional.

0

Yo diría que es probablemente una búsqueda de texto completo sobre el título de la pregunta y el contenido de la pregunta y las respuestas, así como el uso de las palabras individuales (no el título completo) que ingrese. Luego, usando las características de clasificación del texto completo, se muestran las 10 preguntas más importantes que tienen el rango más alto.

Como señaló tydok, parece que están utilizando la búsqueda de texto completo (no podía imaginar otra forma).

Aquí está el MSDN reference on Full-Text Searching, clavar la consulta específica utilizada probablemente no va a suceder.

7

Echa un vistazo a este podcast.

Una de nuestras prestaciones principales optimizaciones para la consulta “relacionada preguntas” es la eliminación de los mejores 10.000 diccionario más común Inglés palabras (según lo determinado por la búsqueda de Google) antes de enviar la consulta al servidor SQL 2008 motor de texto completo. Es impactante lo poco que queda de la mayoría de las publicaciones de una vez que se eliminan las 10k mejores palabras en el diccionario de inglés. Esto ayuda al límite y reduce los resultados devueltos, , lo que hace que la consulta drásticamente sea más rápida.

+1

No desea eliminar demasiadas palabras 'comunes' - 'net, class, switch, case, data' son comunes. El primer paso probablemente buscaría palabras clave sin sus preguntas y consultas de búsqueda con las palabras clave similair –

+0

Esto solo respalda mi respuesta (inexplicablemente downvoted): no se trata del SQL, se trata de lo que se hace antes y después del SQL. –

Cuestiones relacionadas