Solr search query over multiple fields

前端 未结 4 2111
猫巷女王i
猫巷女王i 2020-12-14 00:30

Is it possible to search in Solr over two fields using two different words and get back only those results which contain both of them?

For example, if I have fields

相关标签:
4条回答
  • 2020-12-14 00:50

    The suggested solutions have the drawback, that you have to care about escaping special characters. If the user searches for "type:d'or AND location:coffee break" the query will fail.

    I suggest to combine two edismax handlers:

     <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>
    

    Call the request handler like this:

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

    Explanation

    • The variables $uq1 and $uq2 will be replaced by the request parameters uq1 and uq2 will.
    • The result of the first edismax query (uq1) is combined by logical AND with the second edismax query (uq2)

    Solr Docs

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

    0 讨论(0)
  • 2020-12-14 00:50
    fq=type:furniture AND location:office
    

    Instead of using AND, this could be break into two filter queries as well.

    fq=type:furniture
    fq=location:office
    
    0 讨论(0)
  • 2020-12-14 01:00

    You can use boolean operators and search on individual fields.

    q=type:furniture AND location:office
    

    If the values are fixed, it is better to use Filter Queries for Performance.

    fq=type:furniture AND location:office
    
    0 讨论(0)
  • 2020-12-14 01:00

    You can also use the boostQuery function on the dismaxRequest handler as

    type=dismax&bq=type:furniture AND location:office
    
    0 讨论(0)
提交回复
热议问题