一般要搜索的信息都是被存储在数据库里面的,但是我们不能直接搜数据库,所以只有借助Solr将要搜索的信息在搜索服务器上进行索引,然后在客户端供客户使用。

一、链接数据库

1. SQL配置

拿SQL Server 为例,需要先下载Sql Server的jar包,下载地址:

http://msdn.microsoft.com/en-us/data/aa937724.aspx

解压缩之后将sqljdbc4.jar复制到webapps\solr\WEB-INF\lib下,也就是本例的:

D:\apache-tomcat-7.0.57\webapps\solr\WEB-INF\lib

2. 建立查询

然后在D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf下面新建一个配置文件:data-config.xml

然后在本目录下编辑配置文件:solrconfig.xml

找到很多个requestHandler节点,在最下面增加:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf\data-config.xml</str>
</lst>
</requestHandler>

要配置的内容就是刚才新建文件的路径。

3. 将初次下载的solr-4.10.2文件夹下的dist, contrib文件夹复制到TomCat根目录下:

4. 然后再次修改刚才编辑过的solrconfig.xml增加两个文件夹的配置并修改一些参数:

大约在75行默认有8个路径,但是路径不一定全对,顺着这个配置的路径去找文件夹,根据查找的层数修改这个路径配置,另增加一个新的配置,全文如下:

  <lib dir="D:\apache-tomcat\contrib\extraction\lib" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-cell-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\clustering\lib\" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-clustering-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\langid\lib\" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-langid-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\contrib\velocity\lib" regex=".*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-velocity-\d.*\.jar" />

  <lib dir="D:\apache-tomcat\dist\" regex="solr-dataimporthandler-\d.*\.jar" />

这个配置是根据本机推导出来的,大家根据自己的实际情况去修改。

5. 将dist文件夹下的

复制到webapps\solr\WEB-INF\lib下。

6. 然后编辑

D:\apache-tomcat-7.0.57\webapps\solr\solr_home\collection1\conf\data-confing.xml文件,以本机MyBookShop数据库的Books表为例

配置如下:

<?xml version="1.0" encoding="UTF8"?>
<dataConfig>
<dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=MyBookShop" user="sa" password="111"/>
<document name="Info" pk="id">
<entity name="zpxx" transformer="ClobTransformer" pk="id"
query="SELECT [ID],[Title] as name FROM [MyBookShop].[dbo].[Books]"
deltaImportQuery="SELECT [Id],[Title] as name FROM [MyBookShop].[dbo].[Books] where [PublishDate] > '${dataimporter.last_index_time}'"
deltaQuery="SELECT id FROM [MyBookShop].[dbo].[Books] where [PublishDate] > '${dataimporter.last_index_time}'">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>

此配置千万注意。

上述配置说明如下:

     query是获取全部数据的SQL(solr从sql中获取那些数据),多列

     deltaImportQuery是获取增量数据时使用的SQL(数据库新增数据追加到solr的数据),多列

     deltaQuery是获取pk的SQL(数据库新增数据是,追加到solr的数据时的条件,根据id ,条件是最后一次获取的时间,${dataimporter.last_index_time,最后获取的时间}),一列

如需配置多列,步骤如:

1.先配置数据库查询信息data config:

        <entity name="zpxx"  transformer="ClobTransformer" pk="id"
query="SELECT [ProductID] as ID,[ShopProductTitle] as title1,[SecondTitle] as title2,[ShopProductDescription] as descr FROM [dbo].[ShopProduct]"
deltaImportQuery="SELECT [ProductID] as ID,[ShopProductTitle] as title1,[SecondTitle] as title2,[ShopProductDescription] as descr FROM [dbo].[ShopProduct] where [PublishDate] > '${dataimporter.last_index_time}'"
deltaQuery="SELECT [ProductID] as ID FROM [dbo].[ShopProduct] where [PublishDate] > '${dataimporter.last_index_time}'">
<field column="id" name="id" />
<field column="title1" name="title1" />
<field column="title2" name="title2" />
<field column="descr" name="descr" />
</entity>

2. 配置schema信息(约120多行处):

   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

   <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
<field name="title1" type="text_ik" indexed="true" stored="true"/>
<field name="title2" type="text_ik" indexed="true" stored="true"/>
<field name="descr" type="text_ik" indexed="true" stored="true"/>
<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
 

这样查处的结果就如:

    "docs": [
{
"title1": "樱桃",
"title2": "樱桃樱桃",
"id": "1004",
"descr": "<img alt=\"\" src=\"9f531.jpg\"><img alt=\"\" src=\"5.jpg\">",
"_version_": 1503960451691577300
},

保证SQL SERVER配置了外网访问即可。

配置到此基本结束。

二、建立索引

启动Solr,删除全部索引数据:

http://localhost:8080/solr/update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

停掉Solr,检查下是不是清空了:

开始创建新的索引,浏览器执行方式:

终止跑索引:http://localhost:8080/solr/collection1/dataimport?command=abort

开始索引:http://localhost:8080/solr/collection1/dataimport?command=full-import

增量索引 :http://localhost:8080/solr/collection1/dataimport?command=delta-import

建议学习时使用UI的方式进行更新,能看清运行过程:

需要等执行结束,可以点击【Refrush status】看结果:

Indexing completed. Added/Updated: 1076 documents. Deleted 0 documents. (Duration: 03s)

表示结束。

然后点击左边的查询检验索引结果:

出现查询结果表示创建成功。

三、更新索引、增加索引、删除索引

1. 更新数据:

我们先来搜索一个关键字“土豆”,这里全是计算机图书,不应该有土豆的。

然后将其中一个书籍的标题更新为“论土豆的栽培技术”

不更新索引是搜不到的。

执行增量更新:

http://localhost:8080/solr/dataimport?command=delta-import&clean=false&commit=true

然后去查询:

已经可以查询得到了。

2. 新增一个数据:“论苹果的艺术”

insert into [MyBookShop].[dbo].[Books]

(

[Title]
,[Author]
,[PublishDate]
,[WordsCount]
,[UnitPrice]
,[ContentDescription]
,[AurhorDescription]
,[EditorComment]
,[TOC]
)
SELECT '论苹果的艺术'
,[Author]
,[PublishDate]
,[WordsCount]
,[UnitPrice]
,[ContentDescription]
,[AurhorDescription]
,[EditorComment]
,[TOC]
FROM [MyBookShop].[dbo].[Books] where id=4942

新增结果如下:

然后执行增量索引:

http://localhost:8080/solr/dataimport?command=delta-import&clean=false&commit=true

再查询:

发现新结果被查询出来了。

3. 删除数据

将苹果这条数据删除掉,仍然能够查询出来,执行单条索引删除:

7168&stream.contentType=text/xml;charset=utf-8&commit=true">http://localhost:8080/solr/update/?stream.body=<delete><id>7168</id></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

再次查询就查不到了:

数据库下载

solr连接数据库配置的更多相关文章

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

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

  2. solr连接数据库

    solr与.net系列课程(三)solr连接数据库    solr与.net系列课程(三)solr连接数据库 上一章直接讲述的配置文件把大部分人看的很迷惑,大家都想听的是solr到底是怎么用的,好,这 ...

  3. solr多核配置

    假设已经配置好了一个单core的solr服务器. solr.xml配置文件 单核和多核主要在solr.xml配置不同.在solr/example中已经有一个名称为multicore的文件夹里面给我们配 ...

  4. BugPhobia沟通篇章:Solr模式配置与数据导入调研

    0x01 :Scrum Meeting特别说明 特别说明,考虑到编译原理课程考核的时间安排,每天开发时间急剧缩短以至于难以维系正常的Scrum Meeting,因此,将2015/12/13 00:00 ...

  5. LinqHelper连接数据库配置

    LinqHelper连接数据库配置/// <summary> /// Linq通用数据访问类 /// 指定TDataBase来代替后面要使用的数据上下文(指代) /// where:说明指 ...

  6. TP【连接数据库配置及Model数据模型层】

    [连接数据库配置及Model数据模型层] convertion.php config.php 在config.php做数据库连接配置 制作model模型 a) model本身就是一个类文件 b) 数据 ...

  7. solr scheme配置简介

    solr 字段配置,和数据库数据索引配置 配置solr字段. schema.xml 文件里配置 先讲解一下,里面的一些字段 1. <types> ... </types> 表示 ...

  8. 在Solr中配置中文分词IKAnalyzer

    李克华 云计算高级群: 292870151 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch 在Solr中配置中文分词IKAnalyzer 1.在配置文件schema.xml ...

  9. solr 日志配置

    配置Solr日志记录 临时记录设置 您可以使用Admin Web界面来控制Solr中的日志输出量.选择LOGGING链接.请注意,此页面只允许您更改正在运行的系统中的设置,并不会保存在下一次​​运行中 ...

随机推荐

  1. yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>

    GCHandle handle = GCHandle.Alloc(yuvs, GCHandleType.Pinned); Emgu.CV.Image<Bgr, Byte> image = ...

  2. windows 7 docker oralce安装和使用

    7. oracle数据库的安装 7.1 下载镜像 查询:Docker search Oracle 下载: docker pull wnameless/oracle-xe-11g 如果不能下载,有可能是 ...

  3. Maven个人手册

    一.Maven基本使用与设置 1.安装maven插件 1).下载maven并解压到指定目录,到该目录下复制当前路径path 2).在eclipse的dropins目录下编辑maven.link,将ma ...

  4. 【转】段错误调试神器 - Core Dump详解

    from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联 ...

  5. Redis、Memcache和MongoDB的区别(转)

    1.性能 都比较高,性能对我们来说应该都不是瓶颈 总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2.操作的便利性 memcache数据结构单一 redis丰富一些,数据 ...

  6. java中volatile关键字的含义

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...

  7. Unix/Linux进程间通信(一):概述

    序 Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进 ...

  8. CentOS6.3编译安装Memcached

    要用到如下源码包: /usr/local/src/memcached/libevent-2.0.21-stable.tar.gz /usr/local/src/memcached/memcached- ...

  9. Mac Pro 实现 PHP-5.6 与 PHP-7.0 等多版本切换

    先前参考 如何 实现PHP多版本的 共存 和 切换? 实现了Linux(Ubuntu/CentOS)系统下,PHP多版本的切换,但是在 Mac OS 下,由于用户权限控制的比较严格,文章里提到的脚本运 ...

  10. php gettext 多语言翻译

    1.在window与linux下的多语言切换有些区别,主要putenv的设置区别. 参考链接:http://www.cnblogs.com/sink_cup/archive/2013/11/20/ub ...