2010-09-07 5 views
2

De plus en plus, des recherches ne trouvent pas uniquement une sous-chaîne dans une colonne spécifique, mais elles semblent rechercher dans toutes les colonnes. Un exemple est dans Amazon, où vous pouvez rechercher "Arnold" et il trouve à la fois le film Running Man avec Arnold Schwarzeneggar, et le jouet Gund Arnold le ronflement Pig. Je ne sais pas quel est le terme pour ce type de recherche (Wide search? Global search?), Et ça me dérange. Mais ce que je veux vraiment savoir, c'est quel est le schéma normal pour accomplir ce type de recherche de façon QUICK.Motif de recherche dans l'intégralité d'un enregistrement de base de données, champ non spécifique

L'évidence, et lent, moyen de le faire serait de rechercher la sous-chaîne « Arnold » dans le titre, « Arnold » dans l'auteur, « Arnold » dans la description, etc.

Le La première solution rapide qui vient à l'esprit est de stocker une cartographie pour chaque mot utilisé pour décrire un produit au produit lui-même, puis de rechercher ce mappage de mots. Cela pourrait être rapide, mais cela ne me semble pas très efficace.

Il existe probablement une centaine de façons d'y parvenir, dont certaines n'utilisent probablement même pas de base de données. Mais quelle est la norme?

Répondre

1

Je l'ai fait par le passé en stockant une version XML d'éléments dans une colonne XML dans la table, puis en recherchant dans cette colonne au lieu des autres.

+0

Voilà une idée. Quel type d'index utiliseriez-vous sur cette colonne pour éviter une analyse complète de l'index lors de la recherche de LIKE '% Arnold%'? –

+0

En général, j'activerais fulltext sur cette table, puis j'ajouterais cette colonne à l'index fulltext et ferais la recherche de cette façon. –

+0

+1: J'aime cette idée. Donc, "recherche de texte intégral" est le terme approprié pour cela, ou "Oracle Text" dans le monde Oracle. –

1

Peut-être qu'ils ne stockent pas les données comme vous le souhaitez.

Ils pourraient, par exemple, stocker tous les titres, auteurs, descriptions et tous les autres champs consultables dans une table avec un attribut pour distinguer le type du champ.

+0

C'est le plus probable à mon avis, et semblable à la "première solution rapide qui vient à l'esprit" dans la question. Pouvez-vous dire pour un fait que certaines implémentations majeures sont faites de cette façon? Si oui, veuillez nous en indiquer un. –

Questions connexes