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实现两组关键词组合查询 

你可能感兴趣的:(Solr)