Requête de recherche Solr sur plusieurs champs

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

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

40
demandé sur Pale Blue Dot 2011-11-11 09:09:14

4 réponses

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 des requêtes de filtrage pour les performances.

fq=type:furniture AND location:office
59
répondu Jayendra 2013-04-18 05:51:47

les solutions suggérées ont l'inconvénient, que vous devez vous soucier d'échapper aux caractères spéciaux. Si l'utilisateur recherche pour "type:d'or ET de l'emplacement:pause-café", la requête échoue.

 <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 seront remplacées par les paramètres de requête uq1 et uq2 sera.
  • le résultat de la première requête edismax (uq1) est combiné par logique et avec la seconde requête edismax (uq2)

Solr Docs

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

5
répondu Matthias M 2014-09-01 09:41:42

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

type=dismax&bq=type:furniture AND location:office
4
répondu A Null Pointer 2011-11-11 05:48:14
fq=type:furniture AND location:office

au lieu d'utiliser et, ceci pourrait être cassé en deux requêtes de filtre aussi bien.

fq=type:furniture
fq=location:office
1
répondu Sapumal Jayaratne 2014-01-09 03:33:37