引言

Other men live to eat, while I eat to live.----苏格拉底

别人活着为了享受吃,而我吃是为了活着。

我们活着不能只是为了吃,嘿嘿,有时候我们还得写点代码=。=||

准备工作

1.sqljdbc4.jar 我用的SqlServer2008

Microsoft JDBC Driver 4.0 for SQL Server 支持以下操作系统:

Linux、Unix、Windows Server 2008、

Windows Vista Service Pack 1、Windows Server 2008 R2 和 Windows 7。

2.将solr-5.3.1\dist目录下的 solr-dataimporthandler-5.3.1.jar复制到apache-tomcat\webapps\solr\WEB-INF\lib目录下

3.将下载的sqljdbc4.jar放到apache-tomcat\webapps\solr\WEB-INF\lib目录下

4.在Solr5中默认dataImport功能是禁用的,需要在D:\solr_home\FixValue\conf\solrconfig.xml中追加配置

    <requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>

data-config.xml代表的是当前路径用于数据导入的配置文件,我上篇文章有说到将Example中的配置文件复制过来,里面就包含这个文件

目录在solr-5.3.1\example\example-DIH\solr\solr\conf\data-config.xml

data-config.xml

接下来我们导入数据的关键配置就在 solr-data-config.xml和schema.xml这两个文件里面

1.solr-data-config.xml 我的配置是:

<env-entry>
<dataConfig>
<dataSource name="Test" type="JdbcDataSource" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://192.168.1.1:1433;DatabaseName=Test" user="sa" password="123456"></dataSource>
<document>
<entity name="FixValue" dataSource="hunter"
query="SELECT ID ,FixType,Value,Name,Status,OrderSort,CreationDate FROM [FixValue]"
deltaQuery="SELECT ID FROM [FixValue] where CreationDate > '${dataimporter.last_index_time}'"
deltaImportQuery="SELECT * FROM [FixValue] where ID='${dih.delta.ID}'"
>
<field column="ID" name="id"/>
<field column="FixType" name="fixtype"/>
<field column="Value" name="value"/>
<field column="Name" name="name"/>
<field column="Status" name="status"/>
<field column="OrderSort" name="ordersort"/>
<field column="CreationDate" name="creationdate"/>
</entity>
</document>
</dataConfig>

如果你英文还可以,可以到https://wiki.apache.org/solr/去查找你需要的资料

这里我们用到的是https://wiki.apache.org/solr/DataImportHandler#Configuration_in_data-config.xml

对于solr-data-config.xml的配置,里面都有详细说明,下面我抓几个重要部分说一下:

dataSource数据库链接。

entity.dataSource我们要使用的链接配置名称。

entity.query用于第一次将所有数据全部导入到Solr中。

entity.deltaQuery用于查找有更改的数据。

entity.deltaImportQuery将deltaQuery中超找到的数据同步到Solr中,就是对Solr中已经存在的索引数据进行增加和修改。

entity.deletedPkQuery 这里我没有配置到,具体怎么使用有待研究。

field.column 对应数据库中的字段名称

field.name 对应solr中存储的索引字段名称,区分大小写,后面我们在使用query查询时用到

一般在导入索引数据时都要带上一个唯一的标识字段,用于solr对索引的增删改查

schema.xml

官方参考文献(英语):https://wiki.apache.org/solr/SchemaXml

我们拷贝过来的schema.xml文件中有一些示例数据,我们先清除掉第一行name="_version_"到<uniqueKey>id</uniqueKey>之间的所有行

然后加入我们对FixValue表的字段定义

    <field name="_version_" type="long" indexed="true" stored="true" required="true"/>
<field name="id" type="string" indexed="true" stored="true" omitNorms="true" required="true"/>
<field name="fixtype" type="string" indexed="true" stored="true" omitNorms="true"/>
<field name="value" type="string" indexed="true" stored="true" omitNorms="true"/>
<field name="name" type="text_general" indexed="true" stored="true" omitNorms="true"/>
<field name="status" type="string" indexed="true" stored="true" omitNorms="true"/>
<field name="ordersort" type="string" indexed="true" stored="true" omitNorms="true"/>
<field name="creationdate" type="string" indexed="true" stored="true" omitNorms="true"/>
<uniqueKey>id</uniqueKey>

name="_version_"是属于每个Schema文件中必须包含的字段,记录索引版本的字段。

field.required标识这个字段是必须字段,如果在以后的更新和同步中这个字段值为Null则不会被同步到索引中。

field.type标识这个字段是什么数据类型,是在Schema文件中fieldType节点中配置,需要分词可以使用text_general,但是text_general相对于中文来说很弱,只能一元分词,后面我会开篇介绍如何加入自定义的分词器IKanalyzer。

<uniqueKey>id</uniqueKey>是标识哪个字段是主键

导入数据

至此我们已经配置好了相关的配置,可以进入Solr的Web管理页面导入数据了。http://localhost:9080/manager点击Reload

然后进入管理页面打开FixValue的Dataimport页面

需要引起注意的是这里的command参数,它有两个选项

full-import:全量导入,它会覆盖原有的索引

delta-import:即增量导入,它会在原有索引的基础上追加

下面的几个多选框含义解释如下:

verbose:这个选项设为true的话,会打印导入的一些中间过程的详细信息,有利于调试以及了解内部操作细节

clean:表示是否在导入数据创建索引之前先清空掉原有的索引

commit:表示是否立即提交索引

optimize:表示是否优化索引

debug: 表示是否开启调试模式

如果在导入的时候出现问题,可以去Logging查看错误日志:

执行导入成功之后,我们可以去Query界面查看我们导入的数据:

结尾

至此我们的数据已经成功的导入到了Solr中,那接下我们怎么自动将MSSQ中数据的实时更改同步到Solr中呢?下一篇我们继续学习

附件下载

solr从MssQ导入数据相关配置.rar

.Net程序员 Solr-5.3之旅 (三)Solr 从MSSQ导入索引数据的更多相关文章

  1. solr与.net系列课程(三)solr连接数据库

     solr与.net系列课程(三)solr连接数据库 上一章直接讲述的配置文件把大部分人看的很迷惑,大家都想听的是solr到底是怎么用的,好,这一节我们就开始链接数据库,首先讲一下连接之前都要配置哪些 ...

  2. PHP程序员的技术成长规划 第三阶段:高级阶段

    第三阶段:高级阶段 (高级PHP程序员)重点:除了基本的LNMP程序,还能够在某个方向或领域有深入学习.(纵深维度发展)目标:除了能够完成基本的PHP业务开发,还能够解决大部分深入复杂的技术问题,并且 ...

  3. 程序员你为什么这么累【三】:编码习惯之Controller规范

    作者:晓风轻本文转载自:https://zhuanlan.zhihu.com/p/28717374 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终 ...

  4. iOS开发——程序员必备&iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明

    iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs ...

  5. 《程序员代码面试指南》第三章 二叉树问题 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

    题目待续.... Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题 java代码

  6. 《程序员代码面试指南》第三章 二叉树问题 判断t1 树中是否有与t2 树拓扑结构完全相同的子树

    题目 判断t1 树中是否有与t2 树拓扑结构完全相同的子树 java代码 package com.lizhouwei.chapter3; /** * @Description: 判断t1 树中是否有与 ...

  7. 《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和ZigZag打印

    题目 二叉树按层打印和ZigZag打印 java代码 package com.lizhouwei.chapter3; import java.util.LinkedList; import java. ...

  8. 《程序员代码面试指南》第三章 二叉树问题 遍历二叉树的神级方法 morris

    题目 遍历二叉树的神级方法 morris java代码 package com.lizhouwei.chapter3; /** * @Description:遍历二叉树的神级方法 morris * @ ...

  9. 后端程序员看前端想死(三)是不是该学点js了

    CSS盒子模型 div布局 js 这些都懂一点,但仅仅是懂一点,有时间就学一下咯

随机推荐

  1. 如何让IIS 8.0支持无后缀图片的访问

    进入“MIME类型”模块后,我们点击右侧的“添加”,然后填好文件扩展名和类型值.对于无后缀的图片文件,扩展名只需填写“点”符号即可,类型值根据图片文件实际的扩展名填写.如果是jpeg格式的,那么就填写 ...

  2. javescript扩展方法

    <script type="text/javascript"> //扩展方法 '原型'->'prototype' //通过类对像的prototype设置扩展方法 ...

  3. Thinkphp 验证码、文件上传

    一.验证码 验证码参数 例题:登录时验证下验证码 LoginController.class.php <?php namespace Home\Controller; use Think\Con ...

  4. GFStableList Adapter

    STL中,list的优点是插入.删除性能极佳(时间复杂度只需O(1)即可),而且非常重要的在删除节点后,其迭代器不失效,但list查找却不擅长.map由于其实现的数据结构为rb-tree,因此,其插入 ...

  5. 开源word操作组件DocX的记录

    开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...

  6. Ratchet(WebSockets for PHP)的官方TUTORIALS 的实践

    前几天稍微看了一下Ratchet,并且实践了一下它官方例子.所以现在就将实践的过程记录下来. 在具体实践之前先将Ratchet是什么东东,要先说明一下.以下的英文是从官方copy过来的 Ratchet ...

  7. NTOPNG,用来平时优化网站性能,用处大的

    最近考察一下NTOPNG和NGX-REQ模块,看哪个对网站优化性能用户更大... 参考URL: http://www.68idc.cn/help/jiabenmake/qita/20150109164 ...

  8. HDOJ 1019 Least Common Multiple(最小公倍数问题)

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  9. HDU 4627 There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger number.

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/E 解题思路:数论,从一个数的中间开始往两边找,找到两 ...

  10. How to make onActivityResult get called on Nested Fragment

    One of the common problem we always meet in the world of Fragment is: although we could callstartAct ...