2010-04-30 10 views
1

chaps après-midi,Affiner les recherches Solr, obtenir des correspondances exactes?

droit, je suis assez complexe la construction d'un (pour moi en tout cas) système de recherche d'un site Web en utilisant Solr, bien que cette question est assez simple, je pense ...

J'ai deux recherche critères, emplacement et type. Je veux retourner les résultats qui sont des correspondances exactes au type (lettre à lettre, aucune exception), et l'emplacement comme.

Ma requête de recherche actuelle est la suivante

Type ../select/?q=location:N1: & bleu = 100 lignes & fl = *, le score & debugQuery = true

Cela retourne d'abord tous les types bleus qui correspondent à N1, mais retourne ensuite tout type qui correspond à N1, ce qui est contraire à ce que je suis après. Les deux champs sont définis en tant que textgen dans le schéma Solr.

Des pointeurs?

Vive bande

Répondre

2

Si vous voulez seulement avoir la clause « de type » être obligatoire, vous pouvez garder le ou comme opérateur par défaut et utiliser le signe « + » codé devant de la clause « de type »:

./select/?q=location:N1 %2Btype:blue&rows=100&fl=*,score&debugQuery=true 
+0

A travaillé à merveille, merci Pascal! – Tom

4

Par défaut, Solr utilise l'opérateur OR pour combiner les termes de la requête. Si vous voulez seulement des résultats avec location:N1 AND type:blue au lieu de location:N1 OR type:blue, vous devrez changer l'opérateur. La façon la plus simple de changer cela est en ajoutant un paramètre supplémentaire q.op=AND à l'URL lors de l'interrogation:

../select/?q=location:N1 type:blue&rows=100&fl=*,score&debugQuery=true&q.op=AND 

Vous pouvez également modifier ce pour toutes les requêtes en éditant votre fichier schema.xml; chercher

<solrQueryParser defaultOperator="OR"/> 

et changer pour

<solrQueryParser defaultOperator="AND"/> 

Vous pouvez également changer le type champ de votre champ type à quelque chose qui ne tokenisé, string par exemple. Cela garantira que la correspondance sur ce champ est exacte.

<field name="type" type="string" indexed="true" stored="true"/> 
+0

Dites-moi mon pote, quelques conseils très utiles, très appréciés :) – Tom

Questions connexes