zoukankan      html  css  js  c++  java
  • 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实现两组关键词组合查询 

  • 相关阅读:
    HDU 2089 不要62
    HDU 5038 Grade(分级)
    FZU 2105 Digits Count(位数计算)
    FZU 2218 Simple String Problem(简单字符串问题)
    FZU 2221 RunningMan(跑男)
    FZU 2216 The Longest Straight(最长直道)
    FZU 2212 Super Mobile Charger(超级充电宝)
    FZU 2219 StarCraft(星际争霸)
    FZU 2213 Common Tangents(公切线)
    FZU 2215 Simple Polynomial Problem(简单多项式问题)
  • 原文地址:https://www.cnblogs.com/nayitian/p/3240145.html
Copyright © 2011-2022 走看看