Solr环境配置好后,有很多时候我们需要把数据库里的数据添加到索引里,这时就需要配置跟数据库的连接,下面我们看配置的步骤。

1. 配置 solrconfig.xml  (在slor 主目录 core conf下面 我的地址 :D:\SolrHome\collection1\conf\solrconfig.xml )

在根目录下加入如下配置,其中 data-config.xml 是我们要配置的数据库连接文件路径。

 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  <lst name="defaults">  <str name="config">D:\SolrHome\Question-Hight\conf\data-config.xml</str>  </lst>
</requestHandler>

2. 创建 data-config.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig><dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://127.0.0.1;DatabaseName=QuestionBank" user="sa" password="sa"/><document name="Question-High">            <entity name="Question"  transformer="HTMLStripTransformer" pk="id"query="select * from [dbo].site_HighSchoolQuestion  where IsEnabled=1"  deletedPkQuery="SELECT id FROM [dbo].site_HighSchoolQuestion where IsEnabled=0" deltaImportQuery="select * from [dbo].site_HighSchoolQuestion where id='${dih.delta.id}'"    deltaQuery="SELECT id FROM [dbo].site_HighSchoolQuestion where ModifyTime > '${dataimporter.last_index_time}'">             <field column="Id"      name="Id"      />  <field column="Title"      name="Title"      />     <field column="TitleText"      name="TitleText" /><field column="Content"      name="Content" stripHTML="false"/>                     <field column="SubjectInfo"      name="SubjectInfo" stripHTML="false"/>                                   <entity name="Subject" pk="id" query="SELECT [Code] as SubjectCode FROM [dbo].[site_Subject] where  Id ='${Question.SubjectInfo}'"deltaQuery="SELECT id FROM [dbo].site_Subject where ModifyTime > '${dataimporter.last_index_time}'"parentDeltaQuery="SELECT id FROM [dbo].site_HighSchoolQuestion where SubjectInfo ='$(Subject.id)'">                          <field column="SubjectCode" name="SubjectCode" /></entity></entity>  </document>
</dataConfig>

dataSource 节点 配置数据库 连接字符串http://i.cnblogs.com/EditPosts.aspx?opt=1

entity 节点即Solr中对应的实体 其中属性

transformer:转换器

pk :使用的主键

query : 是获取全部数据的SQL  相当于在solr dataimport 页面执行 full-imoport操作时调用的语句 我这里只需要 启用的数据所以加了条件 where IsEnabled=1

deltaImportQuery: 获取增量数据时使用的SQL 语句 指定要获取哪些列 注意后面的条件  where id='${dih.delta.id}' 这里的 ${dih.delta.id} 是内置变量 它的值跟下面的属性关系密切 它是 deltaQuery 里符合条件的ID

deltaQuery :增量更新时获取PK的SQL语句,${dataimporter.last_index_time}  的值是solr 最后创建索引时间,增量更新是根据这个时间跟数据库更新时间进行对比,选择数据库更新时间在solr更新时间之后的进行更新。

deletedPkQuery : 在某些情况下,可能删除数据并不是物理删除,而只是改变数据库某个值,做个标记,在数据库做了删除标记后,记录还是存在的。这时我们是不需要这些数据进入索引的,

那么我们可以通过这个语句对做过删除标记的索引删除(增量更新时起作用)。

         注意:这个要小心性能问题,它会针对每个 deltaQuery 查询语句里的 id 循环判断 是否在已删除列表里,所以,如果已删除的列表有 200 个

已更新的 ID列表有 10000 个,那么 要进行 200 * 10000 次循环。

field 节点是对应的数据库中的列  其中 column 属性 查询语句中对应的列名, name 属性 solr实体首页的列名。

如果有表关联就出现了下面的配置

<entity name="Subject"  pk="id" query="SELECT [Code] as SubjectCode FROM [dbo].[site_Subject] where  Id ='${Question.SubjectInfo}'"deltaQuery="SELECT id FROM [dbo].site_Subject where ModifyTime > '${dataimporter.last_index_time}'"parentDeltaQuery="SELECT id FROM [dbo].site_HighSchoolQuestion where SubjectInfo ='$(Subject.id)'">                          <field column="SubjectCode" name="SubjectCode" /></entity>

这里 subject 是 site_HighSchoolQuestion 表的关联表,我这里要用到它的 SubjectCode 列,所以在它里面配置了 SubjectCode的 field 节点。

entity 节点 name 节点同上,给这个实体取个名字,方便下面引用。

query : 查询语句这里的条件是 id = Question 的 SubjectInfo的值。

deltaQuery: 增量更新时获取PK的SQL语句 同上

parentDEltaQuery: 获取父实体对象PK的语句 如果 Subject 更新了会通知  Question 更新,而更新就是通过PK值进行的,注意我这里的条件 where SubjectInfo ='$(Subject.id)' 因为我这里两张表是通过 SubjectInfo 关联的

这里有2点要注意的:

1. 子entiyt 必须要设置 PK 不然的话是没法更新的

2. 性能问题, 这里如果 deltaQuery 语句查出的是 10000 条记录   parentDeltaQuery 语句就要执行 10000次 。

3. 如果还不能更新请检查你的 SQL 语句

下面就要配置  同目录下的 schema.xml 了。这里是简化的

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="question-heigh" version="1.5">  <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xmlor Solr won't start. _version_ and update log are required for SolrCloud--> <field name="_version_" type="long" indexed="true" stored="true"/><!-- points to the root document of a block of nested documents. Required for nesteddocument support, may be removed otherwise--><field name="_root_" type="string" indexed="true" stored="false"/><!-- 分词器配置 --><fieldType name="text_ik" class="solr.TextField"><analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/><analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/></fieldType><!--  HTML标签过滤  --><charFilter class="solr.HTMLStripCharFilterFactory"/><!-- 数据库字段 --><field name="Id" type="string" indexed="true" stored="true" required="true" multiValued="false" /><!-- 启用分词 --><field name="Title" type="text_ik" indexed="true" stored="true" />   <field name="TitleText" type="string" indexed="true" stored="false" />   <field name="Content" type="text_ik" indexed="true" stored="true" /><!-- 这里subjectInfo 如果是1对多的关系 multiValued 的值要设置为 true,我这里是 1对1 --><field name="SubjectInfo" type="string" indexed="true" stored="true" />   <field name="SubjectCode" type="string" indexed="true" stored="true" multiValued="false"/><!-- 注意主键设置 --><uniqueKey>Id</uniqueKey> <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> <!-- 随机排序用的 --><fieldType name="random" class="solr.RandomSortField" indexed="true" />  <!-- 默认查询域 --><defaultSearchField>Title</defaultSearchField><solrQueryParser defaultOperator="AND"/>
</schema>

配置就做好了,别忘了添加连接数据库的 jar 包,下载后复制到部署目录下

以我自己的为例: D:\apachetomcat\apache-tomcat-7.0.59\webapps\solr\WEB-INF\lib

同时还需要 solr安装目录里面 D:\solr-4.10.4\dist 下 solr-dataimporthandler-4.10.4.jar 、solr-dataimporthandler-extras-4.10.4.jar 这两个jar包一起拷过去。

试试,是不是可以跑索引了。

转载于:https://www.cnblogs.com/fengh/p/4810879.html

Solr数据库连接之多表关联相关推荐

  1. mybatisplus多表关联查询_ET工具_KETTLE多表关联

    以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:读取对方的多个视图或者表,写入目标库的一张表中,就涉及到多表的同步. 多表同步可以有以 ...

  2. java mongodb 多表关联查询,多条件查询,分页,排序

    前言: 由于最近项目赶,版本迭代快,不知道大BOSS从哪里听别人说MongoDB用来做关系型数据库好,而且速度快,性能高:听到这话的我,立马就反驳了回去:"MongoDB不支持事物" ...

  3. Pandas数据表关联操作

    pandas数据表关联操作 Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似. Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库 ...

  4. 【SpringBoot Data JPA】多表关联查询

    SpringBoot Data JPA 多表关联查询 前言 一.数据库架构设计 1.1 数据表结构 2.2 建立数据库表: 二.SpringBoot整合JPA多表查询 2.1 环境配置 2.2 建立数 ...

  5. 大主子表关联的性能优化方法

    [摘要] 主子表是数据库最常见的关联关系之一,最典型的包括合同和合同条款.订单和订单明细.保险保单和保单明细.银行账户和账户流水.电商用户和订单.电信账户和计费清单或流量详单.当主子表的数据量较大时, ...

  6. sql语句语法多表关联_SQL Delete语句-如何删除行或表,语法示例

    sql语句语法多表关联 To delete a record in a table you use the  DELETE  statement. 要删除表中的记录,请使用DELETE语句. Be c ...

  7. MySQL百万级、千万级数据多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果). 希望读者能够理解 ...

  8. mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优

    作者:成金之路 www.cnblogs.com/uttu/p/6384541.html 本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万 ...

  9. Oracle\MS SQL Server的数据库多表关联更新UPDATE与多表更新

    一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS    S ...

  10. 使用外部表关联MySQL数据到Oracle

    因为业务需要,有个临时的活动需要DBA来支持一些数据业务,问题来了,需要从MySQL端同步一部分数据到Oracle端,然后从Oracle端匹配查到相应的数据返回给MySQL,至于原因,也是不同的业务系 ...

最新文章

  1. 线性代数与矩阵论 定理 1.5.6 拉格朗日插值公式
  2. 简评file_get_contents与curl 效率及稳定性
  3. pic单片机延时程序C语言,PIC单片机C语言延时程序和循环子程序实现方法
  4. c语言二维数组表示坐标,c语言多维数组地址的表示方法
  5. 设计模式C++实现(4)——桥接模式
  6. [机器学习] PMML实现模型上线
  7. caioj1522: [NOIP提高组2005]过河
  8. 还在买白酒?算法工程师们,量化投资了解一下
  9. poj2186Popular Cows(Kosaraju算法--有向图的强连通分量的分解)
  10. Android中你可能忽略的知识点(1)-分辨率那些事
  11. 别说我不懂排序!几种常见排序算法(一)
  12. WampServer2.0的Apache的service无法启动的解决方法
  13. 51nod-1422:沙拉酱前缀
  14. 虚拟化识别共享USB加密狗|银行U盾等解决方案
  15. 挑筋(挑治)疗法——针挑治疗痔疮
  16. Python 发送短信
  17. linux之服务管理
  18. Windows XP系统常见故障简单排除
  19. 推荐一个开源的任务管理工具DooTask(支持私有部署)
  20. 第一批用基因编辑工具定制DNA的婴儿即将诞生?

热门文章

  1. Infor咨询服务调研报告-市场现状、市场份额、市场定位及未来发展趋势
  2. python三国演义人物 统计分析前20个_python爬取三国演义文本,统计三国演义中出场次数前30的人物,并生成词云、图表...
  3. 【你是如何应对杠精行为?】如此精彩语录,看完不笑算我输
  4. U-GAT-IT 翻译
  5. BugKu Web题《网站被黑》writeUp
  6. java chm文件解析_Java 解析chm文件实战(原创)
  7. chm转换html,chm无法用浏览器打开,Windows下如何把chm转换为html?
  8. NSNumber Compare的崩溃
  9. STC12C5A60S2-定时器+数码管
  10. MyExcel 3.6.0 版本发布,支持列表模板混合导出