搜索系统4:简单的通用搜索模块

上文说的导入业务数据,实际上说的构建索引。有了索引,就可以提供搜索服务了。如果使用solrj,比较简单:
SolrQuery query = new SolrQuery();
query.set("q", "*:*");
//传入的选择条件
query.setStart(0);
query.setRows(500);
QueryResponse rsp = server.query(query);
List list = rsp.getBeans(ViewItem.class);

这里需要定义一下ViewItem由那些字段组成,并且把这些字段与solr的schemal里配置的字段关连起来。如下:
class ViewItem {
@Field
private String id;
@Field
private String name;

对于传入的条件,可以先用一个Map的params传进来,再遍历设置一下:
List fqs = new ArrayList();
for(Entry entry:params.entrySet()){
fqs.add(entry.getKey()+":"+entry.getValue());
}
if (fqs.size() > 0) {
String[] fqsArray = fqs.toArray(new String[0]);
query.setFilterQueries(fqsArray);
}
如果要把这代码做得再通用一些,可以把collection(相当于数据表)与返回实体类也传进来,定义如下Controller接口:
public List queryPage(String collection,String resultCls, int start,int pageSize,HttpServletRequest req)
这样,传那个collection,返回什么对象类型都可以自定义了。至于过滤的条件,可以用param.开头的参数来定义。比如:
要查询name中包含"中中"的,那么参数就是param.name='中中',再把这个解析为上面传入的选择条件(params)就可以了。
当然实际的业务情况比这复杂得多,还有大于小于、转换等情况,在后面遇到实际的项目再说。
比如下面的这种搜索需求,就不能用这样简单的搜索,因为还要对"拼团“这个词做特殊处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值