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'.
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
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
Vous pouvez également utiliser la fonction boostQuery sur le handler dismaxRequest comme
type=dismax&bq=type:furniture AND location:office
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