Question

Cas d'utilisation

Lorsqu'un utilisateur va sur mon site, ils seront confrontés à une boîte de recherche un peu comme SO. Ils peuvent rechercher des résultats en utilisant le texte du plan. « Des questions .net », « des questions fermées », « .net et java », etc .. La recherche fonctionne un peu différent que le SO, en ce qu'elle va essayer de le plus possible du schéma de la base de données plutôt qu'une recherche textuelle droite. Alors « les questions .net » recherche uniquement des questions .net par opposition à .net réponses (probablement pas applicable à SO cas, juste un exemple ici), « questions fermées » renverront des questions qui sont fermées, « .net et java » les questions renverront les questions qui se rapportent à .net et java et rien d'autre.

Problème

Je ne suis pas trop familier avec les mots mais je veux essentiellement faire un mot-clé à SQL recherche entraînée. Je sais que le schéma de la base de données et je peux aussi Datamine la base de données. Je veux savoir les approches actuelles il qui existe déjà en avant que je tente de mettre en œuvre. Je suppose que cette question est ce qui est une bonne conception du problème posé.

Projet

Ma solution proposée si loin ressemble quelque chose comme ça

  1. Nettoyez l'entrée. Il suffit de supprimer tous les caractères spéciaux
  2. Parse l'entrée en blocs de données. Casser une entrée "c # java" en c # et java également gérer les cas particuliers comme "des questions 'c # java'" dans 'c # java' et "questions".
  3. Construire un arbre de l'entrée
  4. lier les données dans les métadonnées. Alors convertir des choses comme des questions fermées et se rapportent à la colonne IsClosed d'une table.
  5. Convertir l'arbre dans une requête SQL.

Pensées / suggestions / liens?

Était-ce utile?

La solution

Je dirige un magasin de musique numérique avec une « recherche unique » que les mots clés de poids en fonction de leurs occurrences et le schéma dans lequel les produits apparaissent, par exemple. avec différentes colonnes comme « Artiste », « Titre » ou « Editeur ».

Les produits sont également liés aux albums et listes de lecture, mais pour une explication plus simple, je me contenterai d'élaborer sur l'indexation et l'interrogation des mots clés de produits.

Base de données de schéma

Tableau de Keywords - une table pondérée pour chaque mot qui pourrait éventuellement être recherché (par conséquent, il est référencé quelque part) avec les données suivantes pour chaque enregistrement:

  • ID de mots-clés (pas le mot),
  • Le mot lui-même,
  • Une valeur Soundex Alpha pour la Parole
  • Poids

Tableau de ProductKeywords - une table pondérée pour chaque mot-clé référencé par l'un des champs d'un produit (ou des colonnes) avec les données suivantes pour chaque enregistrement:

  • ID de produit,
  • ID de mots-clés,
  • Poids

Mot de pondération

La valeur de pondération est une indication de la fréquence à laquelle les mots se produit. Avec des mots-clés correspondant à un poids inférieur sont « plus unique » et sont plus susceptibles d'être ce qui est recherché. De cette façon, les mots qui se produisent sont souvent automatiquement « down pondérée », par exemple. « Le », « un » ou « I ». Cependant, il est préférable de dépouiller les occurrences atomiques de ces mots avant l'indexation.

je entiers pour la pondération, mais en utilisant une valeur décimale offrira une plus grande polyvalence, peut-être avec un peu plus lent tri.

L'indexation

Chaque fois qu'un champ produit est mis à jour, par exemple. Artiste ou Titre (qui ne se produit pas souvent), un déclencheur de base de données réindexe mots clés du produit comme si dans une transaction:

  1. Tous les mots-clés de ce produit sont dissociées et supprimés si pas plus référencé.
  2. Chaque champ indexé (par exemple. De l'artiste) valeur est stockée / récupérée en tant que mot-clé dans son intégralité et en rapport avec le produit dans la table ProductKeywords pour une correspondance directe.
  3. Le poids mot-clé est alors incrémenté d'une valeur qui dépend de l'importance du champ. Vous pouvez ajouter, soustraire du poids en fonction de l'importance du champ. Si Artiste est plus important que le titre, Soustraire 1 ou 2 de son réglage du poids de ProductKeyword.
  4. Chaque valeur de champ indexé est débarrassé de tous les caractères non alphanumériques et divisée en groupes de mots distincts, par exemple. "Billy Joel" devient "Billy" et "Joel".
  5. Chaque groupe de mots pour chaque valeur du champ est soundexed et stocké / récupéré en tant que mot-clé et associé au produit de la même manière que dans l'étape 2. Si un mot-clé a déjà été associé à un produit, son poids est simplement ajustée .

Interrogation

  1. Prendre la chaîne de requête de recherche d'entrée dans son intégralité et chercher un mot-clé correspondant directe. Récupérer tous les ProductKeywords pour le mot-clé dans une table en mémoire ainsi que le poids de mots-clés (différent du poids ProductKeyword).
  2. Strip tous les caractères non-alphanumériques et requête divisé en mots-clés. Récupérer tous les mots clés existants (seulement quelques correspondront). Joignez-vous à ProductKeywords correspondant à des mots-clés à la table en mémoire ainsi que le poids de mots-clés, ce qui est différent du poids ProductKeyword.
  3. Répétez l'étape 2, mais utiliser des valeurs soundex à la place, l'ajustement des poids pour être moins pertinent.
  4. Rejoignez ProductKeywords à leurs produits récupérés connexes et récupérer les ventes de chaque produit, ce qui est une mesure de la popularité.
  5. Trier les résultats en poids de mots-clés, le poids et les ventes ProductKeyword. Le sommateur final / tri et / ou pondération dépend de votre mise en œuvre.
  6. Limiter les résultats et les résultats de la recherche de produits de retour au client.

Autres conseils

Ce que vous cherchez est Traitement du langage naturel . Étrangement ce utilisé à inclure libre English Query dans SQL Server 2000 et avant. Mais il est parti maintenant

D'autres sources sont:

Le concept est un mots de mappage de dictionnaire de méta-données à la table, les colonnes, les relations, etc. et un analyseur de phrase anglaise combinés ensemble pour convertir une phrase en anglais (ou seulement quelques mots-clés) en une véritable requête

Certaines personnes ont même l'utilisateur English Query avec reconnaissance vocale pour quelques démos vraiment cool, jamais vu qu'elle était en colère bien!

Vous pouvez utiliser une approche hybride, prendre la recherche en texte intégral des résultats et plus les filtrer en fonction des méta-données de votre # 4. Pour quelque chose de plus intelligent, vous pouvez créer une solution simple d'apprentissage supervisé par le suivi de ce qui lie l'utilisateur clique sur après la recherche et la mémorisation de ce choix avec les mots clés de recherche dans un arbre de décision. Recherches seraient alors minées de cet arbre de décision

scroll top