guide - solr y consulta en mĂșltiples campos
solr vs elasticsearch (4)
¿Es posible buscar solr en dos campos usando dos palabras diferentes y obtener solo los resultados que contienen ambos?
Por ejemplo, si tengo los campos "tipo" y "ubicación", solo quiero aquellos resultados que tengan type = ''furniture'' y location = ''office'' en ellos.
También puede usar la función boostQuery en el controlador dismaxRequest como
type=dismax&bq=type:furniture AND location:office
Puede usar operadores booleanos y buscar en campos individuales.
q=type:furniture AND location:office
Si los valores son fijos, es mejor utilizar las consultas de filtro para el rendimiento.
fq=type:furniture AND location:office
fq=type:furniture AND location:office
En lugar de usar AND, esto también podría dividirse en dos consultas de filtro.
fq=type:furniture
fq=location:office
Las soluciones sugeridas tienen el inconveniente de que debes preocuparte por escapar de los caracteres especiales. Si el usuario busca "type: d''or AND location: coffee break", la consulta fallará.
Sugiero combinar dos manejadores 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>
Llame al controlador de solicitudes de esta manera:
http://localhost:8983/solr/collection1/combine?uq1=furniture&uq2=office
Explicación
- Las variables $ uq1 y $ uq2 serán reemplazadas por los parámetros de solicitud uq1 y uq2.
- El resultado de la primera consulta edismax (uq1) se combina mediante AND lógico con la segunda consulta edismax (uq2)
Solr Docs