引言

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. WinPcap编程(三)

    1.过滤器设置 设置过滤器,得到你想要的哪种类型的包.Like WireShark. 过程:编译过滤器,然后设置过滤器.直接上参考文档的代码: if (d->addresses != NULL) ...

  2. SQL语句宝典

    1.前述: 将数据灵活运用于手掌心! link:1.经典SQL语句大全(cnblogs) 2.SQL教程(W3C)

  3. codeforces 305E Playing with String

    刚开始你只有一个字符串每次能选择一个有的字符串s,找到i,满足s[i - 1] = s[i + 1],将其分裂成3 个字符串s[1 ··  i - 1]; s[i]; s[i + 1 ·· |s|] ...

  4. SQLServer 取小时

    select datepart(hh,getdate())--orselect datename(hh,getdate())

  5. STM8S学习笔记-时钟控制1

    1.图13可见,STM8S单片机主要有四种时钟源可供选择: 1).1-24MHz外部晶体振荡器(HSE). 2).最大24MHz外部时钟(HSE ext). 3).16MHz高速内部RC振荡器(HSI ...

  6. BROCADE 300和MD3200扩展柜FC SAN,截图

    这表示俺玩过,其实,这个光交换机在只有一个共享存储的情况下,可用可不用. FC BROCADE只是为了方便后期扩展. FC SAN之类的识别不靠IP,因为不是IP SAN嘛.但也是自己的识别体系.

  7. VS中的预先生成事件和后期生成事件

    原文:VS中的预先生成事件和后期生成事件 在C#开发中,有时候需要在程序编译之前或之后做一些操作. 要达到这个目的,可以使用Visual Studio中的预先生成事件和后期生成事件. 下图是一个简单例 ...

  8. BZOJ1677: [Usaco2005 Jan]Sumsets 求和

    1677: [Usaco2005 Jan]Sumsets 求和 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 570  Solved: 310[Submi ...

  9. 什么是Web Service?

    Web service到底是什么:在什么情况下你应该使用Web service. 分布式应用程序和浏览器 研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序.这 ...

  10. Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)

    1判断select选项中 是否存在Value="paraValue"的Item 2向select选项中 加入一个Item 3从select选项中 删除一个Item 4删除selec ...