• Solr4:查询参数fq的用法(对结果进行过滤;两组关键词组合查询)


    Solr查询参数文档可以参考:

    http://wiki.apache.org/solr/CommonQueryParameters#head-6522ef80f22d0e50d2f12ec487758577506d6002

    这里主要说一下fq参数的使用。

    1. 需求一

    搜索商户信息时,已经可以按指定关键词搜索;但有时需要缩小范围,比如在江苏省范围搜索,或者是苏州市范围内搜索。注意:不是指记录包含“江苏省”、"苏州市“关键词的,而是此记录的行政区域属性值是属于”江苏省“或者是”苏州市"的。

    2. 实现一

    1). schema.xml定义如下:

       <field name="detail_id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
    
       <field name="category_id" type="int" indexed="true" stored="true" required="true"/> 
       <field name="province_id" type="int" indexed="true" stored="true" required="true"/> 
       <field name="district_id" type="int" indexed="true" stored="true" required="true"/> 

    这些编号应该是不需要分词、需要索引、是否存储视情况而定;我这里设计为需要存储,并且设计为不能为空。

    注意:千万别把这些field的type设计成中文分词的类型。

    2). JSP页面中包含类似于如下代码:

        // 代码片段一,获取查询参数
        String q = request.getParameter("q"); // 查询参数
        String cid = request.getParameter("cid"); // 分类
        String pid = request.getParameter("pid"); //
        String did = request.getParameter("did"); // 地区
    
    // 代码片段二,解析查询参数 StringBuilder sbFilter = new StringBuilder(); if(!did.equals("")){ // 地区标识优先级大于省市级别 sbFilter.append("+district_id:" + did); }else if(!pid.equals("")) { sbFilter.append("+province_id:" + pid); } if(!cid.equals("0")) { // 分类标识 sbFilter.append(" +category_id:" + cid); }
    // 代码片段三,初始化查询 SolrQuery params = new SolrQuery("text:(" + q + ")"); params.set("start", startRow); params.set("rows", PAGE_ROWS); params.set("fl", "detail_id,category_name,province_name,district_name,title,publish_time,detail_info"); params.set("sort", "publish_time desc"); params.addFilterQuery(sbFilter.toString());

    3). q与fq的不同

    如果单就上面的功能而言,把这些查询参数全部放在q中也能达到相关目的。但参数q有个副作用,如果正文中出现了id值,它会高亮的。比如说,查询江苏省的数据(江苏省的province_id=100),那么在搜索结果中如果包含了100这样的数字,这个100会被高亮显示的。

    4). fq还可以查询一个时间段时的数据,具体参考它的文档。

    3. 需求二

    要求实现两组关键词的组合查询。

    比如:两组关键词分别是(贪污、受贿)与(江苏省、苏州市),组合查询后输出结果是包含(贪污、江苏省)OR(贪污、苏州市)OR(受贿、江苏省)OR(受贿、苏州市)关键词的信息。

    4. 实现二

    实现方式请参考:Solr4:利用Filter实现两组关键词组合查询 

  • 相关阅读:
    虚函数与动态多态
    我读苏东坡
    Linux高性能服务器编程学习-第三章思维导图笔记
    Linux高性能服务器编程学习-第二章思维导图笔记
    Linux高性能服务器编程学习-第一章思维导图笔记
    【Knockout】五、创建自定义绑定
    【Knockout】三、data-bind声明式绑定
    【Knockout】四、绑定上下文
    【Knockout】一、认识Knockout,你会爱上它
    【Knockout】二、监控属性Observables
  • 原文地址:https://www.cnblogs.com/nayitian/p/3240145.html
Copyright © 2020-2023  润新知