solr是一款非常强大的搜索项目,虽然基于luncen开发,但是在其基础上做了一定的修改,特别是强大的solr cloud,我是刚开始接触solr,记录下使用solr实现最简单的增删改查。
首先需要搭建solr的开发环境,网上搭建solr开发环境的资料很多,大家可以去找一下,搭建过程也很简单,这里默认大家环境是完好的,没好的话可以参考我的另外一篇博客。
以下操作前提假设:schema.xml中主要的配置为:
<field name="blogId" type="string" required="true" multiValued="false" stored="true" indexed="true"/> <field name="content" type="textik" multiValued="false" stored="true" indexed="true"/> <field name="blogUrl" type="string" multiValued="false" stored="true" indexed="false"/>
一、创建索引
1、获取solr服务的连接,设计了一个单例模式,最小限度的创建连接数量
private static HttpSolrServer httpSolrServer; private static HttpSolrServer getHttpSolrServer() { if (httpSolrServer == null) { // solr服务的url,连接响应时间、连接时间,最大连接数、分路由最大连接数,重试次数,是否支持压缩等参数的设置 httpSolrServer = new HttpSolrServer("127.0.0.1:8983/solr/bolg"); httpSolrServer.setSoTimeout(1000); httpSolrServer.setConnectionTimeout(1000); httpSolrServer.setDefaultMaxConnectionsPerHost(50); httpSolrServer.setMaxRetries(3); httpSolrServer.setMaxTotalConnections(100); httpSolrServer.setAllowCompression(true); httpSolrServer.setFollowRedirects(false); } return httpSolrServer; }
2、创建一个实体类的对象,以便于保存索引,与实体类保存到数据库原理相似
public class BlogDTO implements Serializable{ @Field private String blogId; @Field private String content; @Field private String blogUrl; // 省略get和set方法... }
3、创建索引
public boolean createBlogIndex(List<BlogDTO> blogList) { // blogList中不能包含null对象,需要做一步处理,省略 SolrServer solrServer = getHttpSolrServer(); try { if(blogList == null || blogList.size()==0){ return false; } // 批量创建博客数据索引数据 solrServer.addBeans(blogList); solrServer.commit(); // 优化索引,不建议每次创建好之后都优化,定期优化即可 solrServer.optimize(); return true; } catch (Exception e) { // TODO LOGGER.logException(eventMessage, e); } return false; }
创建好索引后可以选择优化,优化索引所做的操作是将索引文件惊醒合并和归类,在此过程中,会影响索引的读操作,不建议每次创建后优化,可以每隔一定时间进行优化,时间根据需要来设定。索引创建结束成功后,就可以通过solr的客户端查询验证数据了。
二、查询索引
public List<BlogDTO> queryBlogList(String blogId) { List<BlogDTO> queryResult = new ArrayList<BlogDTO>(); QueryResponse response = null; // 主搜索条件 String searchParam = "blodId:" + blogId; // 获取服务连接 SolrServer server = getHttpSolrServer(); SolrQuery query = new SolrQuery(searchParam); // 添加联合查询条件 相当于and query.setFilterQueries("url:www.baidu.com"); // 此处可以设置要返回的字段,比如只返回博客内容 query.setFields("content"); // 搜索排序条件 query.addSortField("blogId", ORDER.desc); query.setRows(2); // 每页文档数,默认为10 try { response = server.query(query); } catch (Exception e) { LOGGER.logException(e); } if (response != null) { SolrDocumentList list = response.getResults(); // 将搜索结果封装为结果类 queryResult = processBlogData(list); } return queryResult; } // 将solr中查询出的文档转换为对象类型 private List<BlogDTO> setReviewData(SolrDocumentList list) { DocumentObjectBinder binder = new DocumentObjectBinder(); List<BlogDTO> blogList = binder.getBeans(BlogDTO.class, list); return blogList; }
索引技术的使用主要是使用到的查询,solr中包含非常强大的查询机制,首先是倒排序方式的查询比db中的正排序快出很多,其次 文档文件中的检索也比关系型数据库检索要来的快,另外,solr中支持的条件查询,非常多,同时还支持评分计算,文档高亮显示,分页检索,自定义返回数据类型(json、xml、csv、php、ruby等等),这里只是实现了最简单的查询,相当于select * from table where id=124
三、更改索引数据
在索引文件中,因为每条数据都是唯一的,在schema.xml中有设置
<uniqueKey>blogId</uniqueKey>
所谓的更改索引数据就是重新创建索引,代码与创建索引有相似之处,此处省略代码
四、删除索引
删除索引就是直接将该索引数据删除,但是我通过solrj删除索引后,发现索引文件依然存在的,不知道是因为没有进行commit操作还是因为没有optimize操作,这个还望了解的同学指点,删除索引的代码如下:
public boolean deleteBlogIndex(List<String> blogIds) { SolrServer solrServer = getHttpSolrServer(); try { solrServer.deleteById(blogIds); solrServer.commit(); return true; } catch (Exception e) { LOGGER.logException( e); } return false; }
以上是通过solrj对索引数据的增删改查操作,有了以上技能啊,就可以简单的将solr技术使用到项目中了,当然,如果真的将solr技术使用到项目中,还需要考虑的是索引文件的定期全量创建机制、索引碎片处理、索引优化机制、查询性能优化,有可能还会用到读写分离、主从同步、服务集群、处理高并发以及与其他一些技术如redis的结合(solr实时性需要慎重使用,可以与redis结合达到业务需求),还需继续研究才行啊,希望喜欢搜索项目的同学一起学习啊
相关推荐
SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次
我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...
这个项目是solr在SSM框架中的使用,实现了在solr中增删改查操作,支持中文分词搜索,高亮显示查询内容,点击查询,描述条件处输入内容进行查询,可以测试中文分词功能。
这个主要是整合了solr的spring+hibernate+webservice的一个框架代码,给大家讲解了solr的批次汇入和增删改查方法的实现方式,给初学者一些代码参考,希望能够帮助大家
Jsp,freemarker,jquery,css+div,jstl标签struts-menu(了解),fckEditor(富文本编辑器) Springmvc,spring,mybatis cxf 文件服务器(jersy) Maven,svn,hudson Oracle Activiti ... Solr
商品管理:用户可以通过图形界面对商品进行增删改查,以及上传图片和富文本编辑。 商品搜索:用户可以通过 solr 搜索引擎对商品进行关键字搜索,以及按照类别、价格、销量等条件进行筛选。 商品详情:用户可以通过...
登陆注册,增删改查,提问,评论,敏感词过滤,站内信,点赞,新鲜事,邮件通知,solr搜索等 框架:SpringBoot + Mybatis 存储:数据库使用MySQL 缓存:Redis 模板引擎:freemarker 搜索引擎:solr 【技术栈】 基于...
自动生成增删改查 base_pagination.js 带分页 base.js 不带分页 3.2. dao 使用了mybatis逆向工程 4. 模块开发 逐个模块开发就好 4.1. 学会评估模块难不难 一个模块难不难从几方面考虑。 涉及几张表? 1,2张表的...
商品编辑:商品增删改查,使用了分页插件 上架:更改商品状态,添加商品信息到solr服务器,静态化商品页面 系统前台 商品检索:使用solr服务器进行全文检索,商品详情页面采用freemarker实现静态化 购物车:采用...
大四工程实训做的仿小米商城网站,ssm框架写的: a)用户模块: ... ... b)商品模块 ...能够对购物车商品的增删改查。 d)订单模块 能够对订单进行查询。 e)在线支付模块 实现与第三方接口的在线支付。
增删改查 16-SSM分布式案例-互联网商城(学习13天) day01_电商介绍--互联网术语-SOA-分布式-集群介绍-环境配置-框架搭建 day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户...