Solr查詢

在Rails使用Sunspot習(xí)慣了,可能對(duì)Solr的原生查詢完全不了解,其實(shí)Sunspot對(duì)Solr的查詢進(jìn)行了非常完美的封裝,Sunspot的查詢會(huì)轉(zhuǎn)換為這樣的請(qǐng)求(參見(jiàn)solr.log):

INFO  - 2016-01-30 20:19:20.893; org.apache.solr.core.SolrCore; [collection1] webapp=/solr path=/select params={fl=*+score&sort=updated_at_d+desc&start=0&q=安徽&qf=title_text+content_text&wt=ruby&fq=type:Bid\:\:Info&fq=close_tag_i:0&rows=20&defType=edismax} hits=1 status=0 QTime=20

  {fl=*+score&sort=updated_at_d+desc&start=0&q=安徽&qf=title_text+content_text&wt=ruby&fq=type:Bid\:\:Info&fq=close_tag_i:0&rows=20&defType=edismax}

這個(gè)才是Solr服務(wù)器真正能夠理解的查詢參數(shù),當(dāng)我們遇到使用Sunspot無(wú)法解決的問(wèn)題的時(shí)候,就需要直接越過(guò)Sunspot來(lái)調(diào)用Solr了。Solr接受的是HTTP協(xié)議的接口調(diào)用,因此查詢的參數(shù)都是通過(guò)URL參數(shù)來(lái)進(jìn)行傳遞,而且參數(shù)中的值都需要進(jìn)行URL的編碼。

下面來(lái)詳細(xì)介紹Solr的查詢語(yǔ)法。

Solr默認(rèn)有三種查詢解析器(Query Parser):

  • Standard Query Parser
  • DisMax Query Parser
  • Extended DisMax Query Parser (eDisMax)

第一種是標(biāo)準(zhǔn)的Parser,最后一種是最強(qiáng)大的,也是Sunspot默認(rèn)使用的Parser。

支持的參數(shù):

  • defType: 選擇查詢解析器類型,例如dismax, edismax
  • q:主查詢參數(shù)(field_name:value)
  • sort:排序,例如score desc,price asc
  • start:起始的數(shù)據(jù)偏移offset,用于分頁(yè)
  • raws:一次返回的數(shù)量,用于分頁(yè)
  • fq:filter query 返回結(jié)果的過(guò)濾查詢
  • fl:fields to list 返回的字段(*, score)
  • debug:返回調(diào)試信息,debug=timing,debug=results
  • timeAllowed:超時(shí)時(shí)間
  • wt:response writer返回的響應(yīng)格式

下面是DisMax Parser可以使用的:

  • qf:query fields,指定查詢的字段,指定solr從哪些field中搜索,沒(méi)有值的時(shí)候使用df
  • mm:最小匹配比例
  • pf:phrase fields
  • ps:phrase slop
  • qs:query phrase slop

特殊符號(hào)意義:

  • ?:te?t 單個(gè)字符匹配
  • *:tes* 多個(gè)字符匹配
  • ~:fuzzy searches(模糊匹配),roam~,roams/foam/foams
  • count:{1 TO 10}:range search 范圍檢索
  • ^:Boosting a Term(升級(jí)權(quán)重),jakarta^4 apache, "酒店"^4 "賓館"
  • ^=:Constant Score with(指定分?jǐn)?shù)),(description:blue OR color:blue)^=1.0 text:shoes

邏輯操作

  • AND 或者 &&
  • NOT 或者 !
  • OR 或者 !!
  • + 必須滿足
  • - 剔除,比如 title: -安徽,返回的是title中不含有"安徽"的所有結(jié)果

回顧復(fù)習(xí)

    fl=*+score
    sort=updated_at_d+desc
    start=0
    q=安徽
    qf=title_text+content_text
    wt=ruby
    fq=type:Bid\:\:Info
    fq=close_tag_i:0
    rows=20
    defType=edismax

夏書(shū)記的需求:

q=(酒店 OR type_i:0)

Solr的查詢可以在圖形界面中進(jìn)行測(cè)試:

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容