博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
solrj操作单机solr
阅读量:6982 次
发布时间:2019-06-27

本文共 3429 字,大约阅读时间需要 11 分钟。

hot3.png

    在目前的生产过程中全文检索技术应用越来越广,其中涌现了一批非常好得开源搜索引擎框架,如solr,elasticsearch等等。其中我工作使用最多的是solr,并在此对之前工作做一个总结。

    solr的索引添加:这里我是直接使用solrj对solr进行操作的,基本流程如下:

 

    一、简单描述

    1、对需要建索引的数据库表给一个索引建立与否的标记字段

    2、数据库方面使用mybatis + spring 对表进行查询操作,通过分页查询和标记字段判断,查询出数据

    3、将查询的数据用solrj 添加到 solr服务之中

    4、判断生成索引成功之后将数据库标记更改

    二、详细流程

    数据库标记字段

185238_8sZt_2851203.png

 

查询数据库sql:(很简单)

<select id="selectByHaveIndex" resultMap="opinionNewsMapper">

        select * from   where iHaveIndexedOneWord= 0 
        <if test="rows>0">
            limit #{beginIndex},#{rows}
        </if>
    </select>

    查询后的数据处理后向solr建立索引

@Override	public boolean createIndexList(List
list, String tablename) { List
docs = new ArrayList
(); for (WebChatNews webChatNews : list) { webChatNews.setTablename(tablename); SolrInputDocument doc = parseWebChatNews(webChatNews); docs.add(doc); } try { solrTermClient.add(docs); UpdateRequest req = new UpdateRequest(); req.add(docs); req.setCommitWithin(10000); //这里是设置的批量提交量 req.process(solrTermClient); } catch (Exception e) { Logginfo.saveLog(Logginfo.createFile(), "solr.SolrIndexExstablishImpl","createIndexList", "创建索引异常", 1, true); e.printStackTrace(); } return true; }@Override public SolrInputDocument parseWebChatNews(WebChatNews webChatNews) { SolrInputDocument doc = new SolrInputDocument(); SpiderBizTable spiderBizTable = webChatNews.getSpiderBizTable(); doc.addField("id", webChatNews.getsId()); return doc; }

然后成功之后修改数据库标记即可

在创建索引的时候我们需要把数据库的需要建立索引的字段添加solr的SolrInputDocument 的filed字段里面如:

SolrInputDocument doc =  new SolrInputDocument();       //把新闻中的sId放到id里面		doc.addField("id", webChatNews.getsId());。。。

当然这远远还不够,光这样我们的solr服务器怎么知道去对应这些字段呢,因此我们要去solr的solr_home的conf目录下去配置managed-schema :

。。。以此类推每增加一个索引就要在这里去配置一个field name就是 doc.addField的里面的key
id
这个配置意思把id设置为唯一的主键

sql如下:

<update id="creatIndexBatch" parameterType="QueryList" >

        update tablename set
            iHaveIndex = 1
            where sId in
          <foreach item="item" index="index" collection="array"   
                        open="(" separator="," close=")">  
                       #{item}  
               </foreach>  
    </update>

这样批量修改效率会高很多;以上任务用定时任务去调用即可,定时任务用spring自带的定时任务,然后项目就跑起来了,再通过一些配置和数据库可以对solr的索引进行管理即可。

    以上是对solr的增量索引的操作,当然也可以用solr自带的jar包实现增量索引也可以。

    solr的更新其实就是添加索引操作,主要是保证索引的主键不变,插入一条索引会自动去更新已有主键的索引。

    索引删除:

@Override	public boolean deleteAll() {		try {			solrClient.deleteByQuery("*:*");			solrClient.commit();		} catch (Exception e) {			Logginfo.saveLog(Logginfo.createFile(), "solr.SolrIndexExstablishImpl","deleteAll", "删除索引失败", 1, true); 			e.printStackTrace();		}		return true;	}	@Override	public boolean deleteIndexList(List
list,String tablename) { String keyWords = null; List
ids = new ArrayList<>(); for (OpinionNews opinionNews : list) { String sId = opinionNews.getsId(); ids.add(sId); } keyWords = "tablename:"+tablename ; try { solrClient.deleteById(ids); solrClient.commit(); } catch (Exception e) { Logginfo.saveLog(Logginfo.createFile(), "solr.SolrIndexExstablishImpl","deleteIndexList", "批量删除索引失败", 1, true); e.printStackTrace(); } return true; } @Override public boolean deleIndexByIds(List
ids){ try { solrClient.deleteById(ids); solrClient.commit(); } catch (Exception e) { e.printStackTrace(); } return true; }

每次对数据库的数据操作一次就要对索引进行一次操作,如果要重建索引只需要把索引创建标记改为初始值即可,这要一套自动建立索引的系统就建立好了,查询的操作,solrj也提供了非常全面的api,当然你也可以用http请求去调用solr页面上的接口,方法很多,当然如果要考虑调用的效率,如果是用java去调用最好还是用solrj,效率更高也更好操作。

    

转载于:https://my.oschina.net/moonroot/blog/1555640

你可能感兴趣的文章
Shell - 简明Shell入门13 - 用户输入(UserInput)
查看>>
模块和包
查看>>
查询一段时间内修改过的存储过程
查看>>
[转]artDialog说明文档
查看>>
递归的二叉查找树Java实现
查看>>
文件管理[Linux]
查看>>
组合模式(Composite Pattern)
查看>>
c#面试题汇总(1)
查看>>
zedboard如何从PL端控制DDR读写(二)——AXI总线
查看>>
拉丁方阵问题
查看>>
python基础
查看>>
Unix系统编程概述
查看>>
Linux历史命令
查看>>
jekins构建自动化项目的步骤
查看>>
(copy)python操作excel
查看>>
机器学习——降维(主成分分析PCA、线性判别分析LDA、奇异值分解SVD、局部线性嵌入LLE)...
查看>>
7-如何宣传
查看>>
eclipse快捷键
查看>>
Android 创建永不Kill的Service
查看>>
C++11 容器Array
查看>>