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?
Par exemple, si j'ai les champs "type" et "location", je veux seulement les résultats qui contiennent type = 'meubles' et location = 'bureau'.
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
Les solutions suggérées ont l'inconvénient que vous devez vous soucier de l'échappement des caractères spéciaux. Si l'utilisateur recherche "type: d'or ET lieu: pause-café", la requête échouera.
Je suggère de combiner deux gestionnaires edismax:
<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>
Appelez le gestionnaire de requêtes comme ceci:
http://localhost:8983/solr/collection1/combine?uq1=furniture&uq2=office
Explication
Solr Docs
Vous pouvez également utiliser la fonction boostQuery sur le gestionnaire dismaxRequest comme
type=dismax&bq=type:furniture AND location:office
fq=type:furniture AND location:office
Au lieu d'utiliser AND, cela pourrait également être divisé en deux requêtes de filtre.
fq=type:furniture
fq=location:office