43 votes

solr et requête sur plusieurs champs

Est-il possible de rechercher solr sur deux champs en utilisant deux mots différents et de ne récupérer que les résultats qui contiennent les deux?

Par exemple, si j'ai des champs "type" et "emplacement", je veux seulement les résultats qui contiennent type = 'meubles' et location = 'bureau'.

71voto

Jayendra Points 27472

Vous pouvez utiliser des opérateurs booléens et rechercher sur des champs individuels.

 q=type:furniture AND location:office
 

Si les valeurs sont fixes, il est préférable d'utiliser Filter Queries for Performance.

 fq=type:furniture AND location:office
 

6voto

Matthias Points 185

Les solutions proposées ont l'inconvénient, que vous avez des soins à ce sujet échapper les caractères spéciaux. Si l'utilisateur recherche pour "type:d'or ET de l'emplacement:pause-café", la requête échoue.

Je suggère de combiner deux edismax des gestionnaires:

 <requestHandler name="/combine" class="solr.SearchHandler" default="false">
     <lst name="invariants">
       <str name="q">
        (_query_:"{!edismax qf='type' v=$uq1}"
   AND _query_:"{!edismax qf='location' v=$uq2}")
       </str>
     </lst>
  </requestHandler>

Appeler le gestionnaire de requêtes comme ceci:

http://localhost:8983/solr/collection1/combine?uq1=furniture&uq2=office

Explication

  • Les variables $uq1 et $uq2 sera remplacé par les paramètres de la requête uq1 et uq2 volonté.
  • Le résultat de la première edismax requête (uq1) est associé par la logique ET la deuxième edismax requête (uq2)

Solr Docs

https://wiki.apache.org/solr/LocalParams

5voto

Vous pouvez également utiliser la fonction boostQuery sur le gestionnaire dismaxRequest comme

 type=dismax&bq=type:furniture AND location:office
 

3voto

 fq=type:furniture AND location:office
 

Au lieu d'utiliser AND, cela peut également être divisé en deux requêtes de filtre.

 fq=type:furniture
fq=location:office
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X