CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks
          solr將以導航為目的的查詢結果稱為facet. 它并不會修改查詢結果信息, 只是在查詢結果上根據分類添加了count信息, 然后用戶根據count信息做進一步的查詢, 比如淘寶的查詢列表中, 上面會表示不同的類目相關查詢結果的數量.

          比如搜索數碼相機, 在搜索結果欄會根據廠商, 分辨率等維度列出, 這里廠商, 分辨率就是一個個facet.

          然后在廠商下面會有nikon, canon, sony等品牌, 這個叫約束(constraints)

          接下來是根據選擇, 列出當前的導航路徑, 這個叫面包屑(breadcrumb).

          solr有幾種facet:
          普通facet, 比如從廠商品牌的維度建立fact
          查詢facet, 比如根據價格查詢時, 將根據價格, 設置多個區間, 比如0-10, 10-20, 20-30等
          日期facet, 也是一種特殊的范圍查詢, 比如按照月份進行facet.

          facet的主要好處就是可以任意對搜索條件進行組合, 避免無效搜索, 改善搜索體驗.

          facet都是在查詢時通過參數指定. 比如
          在http api中這樣寫:
          "&facet=true&facet.field=manu" 
          java代碼這樣寫:
          new SolrQuery("*:*").setFacet(true).addFacetField("manu");
          而xml返回的結果為這樣:
          <lst name="facet_fields">
                      
          <lst name="manu">
                         
          <int name="Canon USA">17</int>
                         
          <int name="Olympus">12</int>
                         
          <int name="Sony">12</int>
                         
          <int name="Panasonic">9</int>
                         
          <int name="Nikon">4</int>
                      
          </lst>
          </lst>
          通過java代碼可以這樣獲取facet結果:
          List<FacetField> facetFields = queryResponse.getFacetFields();
          在已有的查詢基礎上增加facet query,可以這樣寫:
          solrQuery.addFacetQuery("quality:[* TO 10]")
          比如對價格按照指定的區間進行facet, 可以這樣加上facet后綴:

          &facet=true&facet.query=price:[* TO 100]
          &facet.query=price:[100 TO 200];&facet.query=[price:200 TO 300]
          &facet.query=price:[300 TO 400];&facet.query=[price:400 TO 500]
          &facet.query=price:[500 TO *]

          如果要對價格在400到500期間的產品做進一步的搜索, 那么可以這樣寫(使用了solr的過濾查詢):
          引用
          http://localhost:8983/solr/select?q=camera &facet=on&facet.field=manu&facet.field=camera_type &fq=price:[400 to 500]


          注意這里的facet field不再包含price了

          如果這里對類型做進一步的查詢, 那么query語句可以這樣寫:
          引用
          http://localhost:8983/solr/select?q=camera &facet=on&facet.field=manu &fq=price:[400 to 500] &fq=camera_type:SLR


          facet的使用場景:
          1.類目導航
          2.自動提示, 需要借助一個支持多值的tag field.
          3.熱門關鍵詞排行, 也需要借助一個tag field






          posted on 2012-05-30 14:52 CONAN 閱讀(1203) 評論(0)  編輯  收藏 所屬分類: Solr
          主站蜘蛛池模板: 班戈县| 长宁县| 开平市| 波密县| 大渡口区| 芦山县| 专栏| 绩溪县| 得荣县| 湾仔区| 本溪市| 福鼎市| 湖南省| 馆陶县| 阿拉善盟| 德清县| 稻城县| 连平县| 潢川县| 肇庆市| 隆安县| 北票市| 阜康市| 丰顺县| 兰西县| 永登县| 金乡县| 南康市| 白朗县| 禹城市| 镇宁| 汝南县| 革吉县| 太谷县| 远安县| 沐川县| 新宾| 乐亭县| 海伦市| 长春市| 浦县|