zoukankan      html  css  js  c++  java
  • Solr高级查询Facet

    一、什么是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

  • 相关阅读:
    Reactive Extensions (Rx) 入门(5) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(4) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(3) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
    Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
    Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案
    Android 系统Action大全
    Xamarin Forms 实现发送通知点击跳转
    如何理解灰度发布
    推荐一款分布式微服务框架 Surging
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/9328201.html
Copyright © 2011-2022 走看看