Solr4:查询参数fq的用法(对结果进行过滤;两组关键词组合查询)
2013-08-06 11:23
309 查看
Solr查询参数文档可以参考:
http://wiki.apache.org/solr/CommonQueryParameters#head-6522ef80f22d0e50d2f12ec487758577506d6002
这里主要说一下fq参数的使用。
这些编号应该是不需要分词、需要索引、是否存储视情况而定;我这里设计为需要存储,并且设计为不能为空。
注意:千万别把这些field的type设计成中文分词的类型。
2). JSP页面中包含类似于如下代码:
3). q与fq的不同
如果单就上面的功能而言,把这些查询参数全部放在q中也能达到相关目的。但参数q有个副作用,如果正文中出现了id值,它会高亮的。比如说,查询江苏省的数据(江苏省的province_id=100),那么在搜索结果中如果包含了100这样的数字,这个100会被高亮显示的。
4). fq还可以查询一个时间段时的数据,具体参考它的文档。
比如:两组关键词分别是(贪污、受贿)与(江苏省、苏州市),组合查询后输出结果是包含(贪污、江苏省)OR(贪污、苏州市)OR(受贿、江苏省)OR(受贿、苏州市)关键词的信息。
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实现两组关键词组合查询相关文章推荐
- Solr4:利用Filter实现两组关键词组合查询
- Oracle数据库中字段定义为Char类型,Hibernate用该字段进行动态绑定参数查询,获取不到结果的问题
- Lucene4:利用Filter实现两组关键词组合查询
- Mybatis传递多个参数进行SQL查询的用法
- Mybatis传递多个参数进行SQL查询的用法
- 关于向Mybatis传递多个参数进行SQL查询的用法
- PHP 数据库查询结果转换数组后进行再查询过滤
- 关于向Mybatis传递多个参数进行SQL查询的用法
- Solr的一些查询参数
- solr的查询条件过滤
- solr的copyFeild用法(改变各个feild的权重,修改打分结果)-注意!
- solr查询参数设置
- solr界面和查询参数注解
- 单线程解析文件,根据文件关键词进行统计,并将结果输出(二)
- oracle将两个结果连接后进行查询,得到两个查询的联合结果
- .NET/C#中对对象集合进行查询的方法 以及相关的 Predicate<T> 及 Action<T> 的用法
- 润乾报表中参数表单关联过滤异步加载用法
- 将SQL查询结果作为查询条件进行查询
- CLEMB命令根据参数和脚本用DB2存储过程当做数据源进行查询
- solr查询参数