2010-01-25 6 views
1

J'ai un site Web de petites annonces, et les utilisateurs peuvent par exemple rechercher des voitures.Comment implémenter la recherche "commence par" dans SOLR?

Lorsque vous recherchez une voiture, il y a un certain nombre de fins dans leurs noms, comme vous le savez probablement tous. Par exemple permet de dire Bmw 330Ci (la fin beeing « ci »), mais il y a aussi Bmw 330i, ou Bmw 330di etc etc

Comment puis-je faire SOLR « comprendre » ce, donc si les utilisateurs recherchent 330 SOLR sera retour des résultats contenant 330ci/330i/330di etc.

en outre, il shoul ne renvoie aucun résultat si un utilisateur entrées spécifiquement Bmw 330Ci, il doit seulement retourner Bmw 330Ci et NON Bmw 330i/di etc ...

Je suis nouveau à SOLR, mais je commence à comprendre comment le faire fonctionner. Besoin d'un peu de conseils sur celui-ci si!

Comment l'auriez-vous fait?

Merci

Répondre

1

Vous voudrez probablement analyser le champ à l'aide du WordDelimiterFilterFactory, mis en place pour diviser les transitions numériques. Cela permettra une requête de 330 pour correspondre à tout. Je crois que, par défaut, lorsque vous le faites également au moment de la requête, il crée une requête de phrase à partir de 330di -> "330 di", qui ne doit correspondre que si les deux parties sont présentes dans l'index. Voir http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters pour plus de détails.

0

Je ne sais pas SOLR, il semble être pour la recherche en texte intégral. Toutefois, étant donné que vous connaissez votre modèle dès le départ, vous pouvez utiliser le langage SQL standard pour ce faire.


Dans le champ de base de données pour le nom, au lieu de mélanger le nom de base à la fin, vous pouvez diviser les deux en deux colonnes, comme « RootName » et « suffixName ». Puis votre SQL peut très naturellement, et extrêmement efficacement (par rapport à la recherche en texte intégral), trouver ce dont vous avez besoin: recherchez le "rootName", et sélectionnez également le "suffixName" (mais seulement si spécifié).

1

Eh bien, cela dépend de plusieurs facteurs, mais, en règle générale, dans le premier cas, vous pouvez utiliser des caractères génériques, par exemple:
q = 330 *

dans le second cas, vous pouvez pointer directement sur le terrain et faire une recherche exacte: <fieldName>: 330ci

Questions connexes