程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Solr高級查詢Facet,solrfacet

Solr高級查詢Facet,solrfacet

編輯:關於.NET

Solr高級查詢Facet,solrfacet


一、什麼是facet

       solr種以導航為目的的查詢結果成為facet,在用戶查詢的結果上根據分類增加了count信息,然後用戶根據count信息做進一步搜索。

       facet主要用於導航實現漸進式精確搜索,從兩張圖來看看Facet用途。 (圖1)當進入重慶二手車列表時搜索條件會列出所有品牌、車系、價格區間、車系年貸款等等。 (圖2)當你點擊大眾時頁面刷新車系會列出大眾所屬的所有車系、價格區間。顧名思義我雖solr facet的理解也就是:  當然,你從京東導航、淘寶導航也能看到如此效果,這樣的場景下就是solr facet扮演的角色。

 

二、facet查詢

      在接觸facet查詢過程中可以在solr控制台裡多觀察查詢路徑的變化及返回response的變化。

2.1 facet.field使用

q=條件
facet=true or facet=on
facet.fields=品牌
facet.fields=車系
http://localhost:8080/solr/select/?q=*:*&facet=on&facet.field=品牌&facet.field=車系
<response>
    <lst name="responseHeader">......</lst>
    <result name="response" numFound="6" start="0">...</result>
    <lst name="facet_counts">
        <lst name="facet_queries" />
        <lst name="facet_fields">
            <lst name="品牌">
                <int name="大眾">1</int>
                <int name="奧迪">1</int>
                <int name="寶馬">1</int>
            </lst>
            <lst name="車系">
                <int name="POLO">1</int>
                <int name="邁騰">1</int>
            </lst>
        </lst>
        <lst name="facet_dates" />
        <lst name="facet_ranges" />
    </lst>
</response> 

 

2.2 facet.query 查詢

      facet.query類似於filter query的語法。可以提供自定義區間查詢,可以對任何字段進行區間篩選。   

 

q=條件
facet=true
&facet.query=price:[*+TO+3]
&facet.query=price:[3.01+TO+5]
http://localhost:8080/solr/select/?q=*:*&fq=price%3A%5B3.01+TO+5%5D+&facet=true  //注意使用facet.query時不再是facet.query字段,而是fq字段。

 

<response>
    <lst name="responseHeader">......</lst>
    <result name="response" numFound="6" start="0">...</result>
    <lst name="facet_counts">
        <lst name="facet_queries">
               <int name="price:[*+TO+3]">1</int>
           <int name="price:[3.01+5]">1</int>                
         </lst>
        <lst name="facet_fields"/>       
        <lst name="facet_dates" />
        <lst name="facet_ranges" />
    </lst>
</response> 

2.3 facet.Date

http://localhost:8080/solr/select?q=*:*&rows=0&facet=true&facet.date=added&facet.date.start=NOW/DAY-30DAYS&facet.date.end=NOW/DAY&facet.date.gap=+7DAY
<int name="2010-11-08T00:00:00Z">0</int>  
<int name="2010-11-15T00:00:00Z">0</int>  
<int name="2010-11-22T00:00:00Z">0</int>  
<int name="2010-11-29T00:00:00Z">2</int>  
<int name="2010-12-06T00:00:00Z">2</int> 

 

2.4 key操作符

&facet=on

&facet.field={!key=中央處理器}cpu

&facet.field={!key=顯卡}videoCard

 

2.5 什麼字段適合用facet呢?     

      facet中適宜的字段一般代表某個實體的公共屬性,比如品牌、型號、價格區間、作者、廠商、書籍出版商等。

四、facet參數

facet.prefix  –   限制constaints的前綴

facet.mincount=0 –  限制constants count的最小返回值,默認為0

facet.sort=count –  排序的方式,根據count或者index

facet.offset=0   表示在當前排序情況下的偏移,可以做分頁

facet.limit=100 –  constraints返回的數目

facet.missing=false –  是否返回沒有值的field

facet.date –  Deprecated, use facet.range

facet.query

facet.method  取值為enum或fc,默認為fc.該字段表示了兩種Facet的算法,與執行效率相關.

facet.date、facet.date.start、facet.date.end、facet.date.gap、facet.date.hardend

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

 

參考資料

http://www.coin163.com/java/docs/201310/d_3010029802.html

http://www.tuicool.com/articles/Iv2UjiU

http://blog.csdn.net/zhangshuliai/article/details/8022316

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved