Pregunta

Caso de uso

Cuando un usuario visita mi sitio web, se enfrentará a un cuadro de búsqueda muy parecido a SO.Pueden buscar resultados utilizando el texto del plan."Preguntas .net", "Preguntas cerradas", ".net y java", etc.La búsqueda funcionará un poco diferente a SO, ya que intentará obtener la mayor cantidad posible del esquema de la base de datos en lugar de una búsqueda directa de texto completo.Por lo tanto, las "preguntas .net" solo buscarán preguntas .net en lugar de respuestas .net (probablemente no se aplique al caso SO, solo un ejemplo aquí), las "preguntas cerradas" devolverán preguntas cerradas, ".net y java". Las preguntas devolverán preguntas relacionadas con .net y Java y nada más.

Problema

No estoy muy familiarizado con las palabras, pero básicamente quiero hacer una palabra clave para la búsqueda basada en SQL.Conozco el esquema de la base de datos y también puedo extraer datos de la base de datos.Quiero conocer cualquier enfoque actual que ya exista antes de intentar implementar esto.Supongo que esta pregunta es sobre cuál es un buen diseño para el problema planteado.

Propuesto

Mi solución propuesta hasta ahora se parece a esto

  1. Limpiar la entrada.Simplemente elimine los caracteres especiales
  2. Analiza la entrada en fragmentos de datos.Divida una entrada de "c# java" en c# y java. También maneje los casos especiales como "preguntas 'c# java'" en 'c# java' y "preguntas".
  3. Construye un árbol a partir de la entrada.
  4. Vincular los datos en metadatos.Así que convierta cosas como preguntas cerradas y relacionelas con la columna cerrada de una tabla.
  5. Convierta el árbol en una consulta SQL.

¿Pensamientos/sugerencias/enlaces?

¿Fue útil?

Solución

Dirijo una tienda de música digital con una "búsqueda única" que pondera las palabras clave según su aparición y el esquema en el que aparecen los productos, por ejemplo.con diferentes columnas como "Artista", "Título" o "Editor".

Los productos también están relacionados con álbumes y listas de reproducción, pero para una explicación más sencilla, solo daré más detalles sobre la indexación y consulta de las palabras clave de los productos.

Esquema de base de datos

Keywords tabla: una tabla ponderada para cada palabra que podría buscarse (por lo tanto, se hace referencia a ella en algún lugar) con los siguientes datos para cada registro:

  • ID de palabra clave (no la palabra),
  • La Palabra misma,
  • Un valor Soundex Alpha para la palabra
  • Peso

ProductKeywords tabla: una tabla ponderada para cada palabra clave a la que hace referencia cualquiera de los campos (o columnas) de un producto con los siguientes datos para cada registro:

  • ID del Producto,
  • ID de palabra clave,
  • Peso

Ponderación de palabras clave

El valor de ponderación es una indicación de la frecuencia con la que aparecen las palabras.Las palabras clave coincidentes con un peso menor son "más exclusivas" y es más probable que sean lo que se busca.De este modo, las palabras que aparecen con frecuencia se "rebajan" automáticamente, p. ej."el", "un" o "yo".Sin embargo, es mejor eliminar las apariciones atómicas de esas palabras comunes antes de indexar.

Usé números enteros para ponderar, pero usar un valor decimal ofrecerá más versatilidad, posiblemente con una clasificación un poco más lenta.

Indexación

Cada vez que se actualiza algún campo de producto, por ejemplo.Artista o Título (lo cual no sucede tan a menudo), un activador de base de datos vuelve a indexar las palabras clave del producto de esta manera dentro de una transacción:

  1. Todas las palabras clave de productos se desasocian y eliminan si ya no se hace referencia a ellas.
  2. Cada campo indexado (por ej.Artista) el valor se almacena/recupera como una palabra clave en su totalidad y se relaciona con el producto en el ProductKeywords mesa para un partido directo.
  3. Luego, el peso de la palabra clave se incrementa en un valor que depende de la importancia del campo.Puedes sumar, restar peso según la importancia del campo.Si el Artista es más importante que el Título, reste 1 o 2 de su ProductKeyword ajuste de peso.
  4. A cada valor de campo indexado se le quitan los caracteres no alfanuméricos y se divide en grupos de palabras separados, por ejemplo."Billy Joel" se convierte en "Billy" y "Joel".
  5. Cada grupo de palabras separado para cada valor de campo se procesa y se almacena/recupera como una palabra clave y se asocia con el producto de la misma manera que en el paso 2.Si una palabra clave ya ha sido asociada a un producto, simplemente se ajusta su peso.

Consultando

  1. Tome la cadena de búsqueda de consulta de entrada en su totalidad y busque una palabra clave que coincida directamente.Recupere todas las palabras clave de producto para la palabra clave en una tabla en memoria junto con el peso de la palabra clave (diferente del peso de la palabra clave del producto).
  2. Elimine todos los caracteres no alfanuméricos y divida la consulta en palabras clave.Recupere todas las palabras clave existentes (solo unas pocas coincidirán).Únase a ProductKeywords para hacer coincidir las palabras clave con la tabla en memoria junto con el peso de la palabra clave, que es diferente del peso de la palabra clave del producto.
  3. Repita el paso 2, pero utilice valores de Soundex en su lugar, ajustando los pesos para que sean menos relevantes.
  4. Combine las palabras clave de producto recuperadas con sus productos relacionados y recupere las ventas de cada producto, que es una medida de popularidad.
  5. Ordene los resultados por peso de palabra clave, peso de palabra clave de producto y ventas.La suma/clasificación y/o ponderación final depende de su implementación.
  6. Limite los resultados y devuelva los resultados de la búsqueda de productos al cliente.

Otros consejos

Lo que se busca es Natural Language Processing . Por extraño que parezca este utiliza que se incluye de forma gratuita como Inglés consulta en SQL Server 2000 y anteriores. Pero se ha ido ahora

Algunas otras fuentes son:

El concepto es un meta palabras de mapeo diccionario de datos a la tabla, columnas, relaciones, etc y un analizador frase Inglés combinados entre sí para convertir una frase Inglés (o sólo algunas palabras clave) en una consulta real

Algunas personas incluso de usuario Inglés de consulta con el reconocimiento de voz para algunas demostraciones muy interesantes, nunca lo vi utiliza en la ira, aunque!

Si está utilizando SQL Server, puede simplemente usar su Full- Búsqueda de texto función, que está diseñado específicamente para resolver su problema.

Se puede usar un enfoque híbrido, tomar los resultados de búsqueda de texto completo y más filtrarlos basado en los metadatos de su # 4. Para algo más inteligente podría crear una solución de aprendizaje supervisado sencilla mediante el seguimiento de lo que vincula el usuario hace clic en después de la búsqueda y almacenar esa elección con las palabras clave de búsqueda en un árbol de decisión. Búsquedas entonces serían extraídos de este árbol de decisión

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