1. 程式人生 > >solr 查詢語法解析

solr 查詢語法解析

solr的查詢語法是solr應用中查詢的基礎,下文將介紹一下solr查詢中的基礎語法。


內建查詢函式

如果你想自定義搜尋結果打分機制的話,你可以組合solr內建的函式。一般情況下,你可以設定defType=edismax;bf=[自定義函式] 來設定打分機制進行排序。

solr內建的查詢函式,官方文件見 https://wiki.apache.org/solr/FunctionQuery ,中文翻譯見 http://mxsfengg.iteye.com/blog/352191

The Standard Query Parser

  • ^=
    文件結構定義中,存在item_title,和shop_name兩個欄位,都是text_ik型別。如果item_title能夠ik分詞匹配到,分數設定為1。
    再加上shop_name的匹配分數,可以使用下面的查詢q:
    q=(item_title:毛衣)^=1 shop_name:毛衣

The DisMax Query Parser

DisMax查詢解析器旨在處理使用者輸入的簡單短語(沒有複雜的語法),並根據每個欄位的重要性使用不同的加權(提升)搜尋多個欄位中的各個術語。 其他選項使使用者能夠根據特定於每個用例的規則(獨立於使用者輸入)影響分數。

  • bq
    bq(boost query)引數指定一個附加的可選查詢子句,該子句將新增到使用者的主查詢中以影響分數。 例如,如果要為最近的文件新增相關性提升:
    q=cheese
    bq=date:[NOW/DAY-1YEAR TO NOW/DAY]
    
  • bf
    bf引數指定將用於構造FunctionQueries的函式(帶有可選的boost),FunctionQueries將作為將影響分數的可選子句新增到使用者的主查詢中。 可以使用Solr原生支援的任何函式以及增強值。 例如:
    recip(rord(myfield),1,2,3)^1.5
    
    使用bf引數指定函式基本上只是將bq param與{!func}解析器結合使用的簡寫。
    例如,如果要首先顯示最新文件,可以使用以下任一方法:
    bf=recip(rord(creationDate),1,1000,1000)
      ...or...
    bq={!func}recip(rord(creationDate),1,1000,1000)