下载地址

http://archive.apache.org/dist/lucene/solr/   推荐

http://www.apache.org/dyn/closer.lua/lucene/solr/7.7.0/solr-7.7.0.tgz

低版本的安装方法

1,首先有一个solr-4.10.3.zip的文件。解压,dist下有个war文件。

2,复制war,放到tomcat中,启动,解压。

3,将  solr-4.10.3.zip/example/lib/ext 目录下的所有的 jar 包,添加到刚解压出来的 solr 的工程中(\WEB-INF\lib目录下)

4,创建一个 solrhome 。solr-4.10.3.zip 下的/example/solr 目录就是一个 solrhome。复制此目录到D盘改名为solrhome

5,关联 solr 及 solrhome。需要修改 solr 工程的 web.xml 文件

 <env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>d:\solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

6,启动 Tomcat

安装ik

1,把IKAnalyzer2012FF_u1.jar 添加到 solr 工程的\WEB-INF\lib 目录下

2,创建WEB-INF/classes文件夹  把扩展词典、停用词词典、配置文件放到 solr 工程的 WEB-INF/classes 目录下

ext_stopword.dic






使



























mydict.dic

刘中华
高富帅
白富美

IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典-->
<entry key="ext_dict">mydict.dic;</entry> <!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopword.dic</entry>
</properties>

3、修改 Solrhome 的 solrhome\collection1\conf\schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer

<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

高版本的安装方法

http://www.cnblogs.com/ITDreamer/p/10661949.html

// cmd 到bin目录 solr start -f 启动

在bin目录下执行bin/solr start 此命令会启动solr应用服务器默认端口为8983,如果想指定端口号启动可以加参数–p例 如:solr start –p 8888.   出现Started Solr server on port 8983. Happy searching!   表示成功

访问http://localhost:8983/solr/  s小写

2. solr常用命令:

solr start –p 端口号 单机版启动solr服务

solr restart –p 端口号 重启solr服务

solr stop –p 端口号关闭solr服务

solr create –c name 创建一个core实例(core概念后面介绍)

创建core

core创建:core的创建方式有很多种一下列出两种比较方便的。

1)      在bin目录下执行solr create –c name,创建一个core,默认创建出来的位置如下图

2)      第二种方式是直接使用AdminUI页面创建一个core

在server/solr 目录下创建core名称 hello

再将 configsets/_default 目录下的conf目录拷贝到 hello 目录下

修改页面上new_core 为刚新建的目录名称hello

ok 了

安装ik

ik分词器下载

虽然是5.0的ik,但是可是用

解压把 里面的两个jar复制,放到solr-8.0.0\server\solr-webapp\webapp\WEB-INF\lib下

然后再在WEB-INF下创建classes目录,将另外三个关于分词的文件扔里面。

然后再去数据库的目录solr-8.0.0\server\solr\hello\conf\managed-schema文件。添加ik分词器字段。

<!-- ik分词器 -->
<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>

DIH导入索引数据

1.      DIH简介:

DIH全称是Data Import Handler 数据导入处理器,顾名思义这是向solr中导入数据的,我们的solr目的就是为了能让我们的应用程序更快的查询出用户想要的数据,而数据存储在应用中的各种地方入xml、pdf、关系数据库中,那么solr首先就要能够获取这些数据并在这些数据中建立索引来达成快速搜索的目的,这里就列举我们最常用的从关系型数据库中向solr导入索引数据。

2 .   配置文件

位置 : solr-8.0.0\server\solr\数据库\conf 下

2个重要的文件,solrconfig.xml   (这个是设置连接数据库映射的)和  managed-schema(老版本是schema.xml)    这个是设置solr数据库字段的。

第一步:

在solrconfig.xml 写下面代码

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

然后在同级目录创建  db-data-config.xml  文件,里面是配置映射的东东,不用写,去example中复制就行  solr-8.0.0\example\example-DIH\solr\db\conf   下有

db-data-config.xml

(下面这个可以满足增量,全量,删除,等操作。)注意:数据库字段,一定要有一个时间字段来作为增量的标志,还要有一个删除字段,来作为同步删除的标志

<dataConfig>
<!-- <dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:${solr.install.dir}/example/example-DIH/hsqldb/ex" user="sa" /> -->
<dataSource name="bill" type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl" user="bill" password="bill2018"/>
<document>
<entity name="item" pk="ID"
query="SELECT ID,ITEM_GOODSID,ITEM_TITLE,ITEM_PRICE,ITEM_IMAGE,ITEM_CATEGORY,ITEM_SELLER,ITEM_BRAND,LAST_MODIFIED from ITEM where IS_DELETE='0'"
deltaQuery="select id from item where IS_DELETE='0' AND last_modified > to_date('${dataimporter.last_index_time}' ,'yyyy-mm-dd hh24:mi:ss') "
deletedPkQuery="select ID from ITEM where IS_DELETE='1' "
deltaImportQuery="select ID,ITEM_GOODSID,ITEM_TITLE,ITEM_PRICE,ITEM_IMAGE,ITEM_CATEGORY,ITEM_SELLER,ITEM_BRAND,LAST_MODIFIED from item where IS_DELETE='0' AND id = '${dih.delta.ID}' ">
<field column="ID" name="id" />
<field column="ITEM_GOODSID" name="item_goodsid" />
<field column="ITEM_TITLE" name="item_title" />
<field column="ITEM_PRICE" name="item_price" />
<field column="ITEM_IMAGE" name="item_image" />
<field column="ITEM_CATEGORY" name="item_category" />
<field column="ITEM_SELLER" name="item_seller" />
<field column="ITEM_BRAND" name="item_brand" />
<field column="LAST_MODIFIED" name="last_modified"/>
</entity>
</document>
</dataConfig>

Entity标签默认支持的属性如下:

Name:(必须)唯一的名称,用来区分Entity。

Processor:如果不定义,默认值为SqlEntityProcessor,用于从关系型数据库导入数据。如果从关系型数据库以外的源导入数据,需要指定对应的Processor。

Transformer:应用在此字段上的transformer。

dataSource:Entity对应表或者视图所用的数据源。引用数据源配置的name。

Pk:Entity中的主键,与数据库中的主键不完全对应。该字段可选,用于增量导入(delta-import)。

RootEntity:默认document标签下的Entity标签的该属性为True。如果该层Entity的属性为False。则接下来一层的Entity的该属性为Ture。(嵌套时直到该属性为True)。根Entity每有一条记录满足条件,就会在Solr中创建一个文档(Document)。
onError:可能值为三个,abort,skip和continue。默认值为abort,表示终止导入;skip表示跳过导入错误的Document。Continue表示忽略错误,继续执行导入。

preImportDeltaQuery:在全导入前,如果未定义该属性,则使用“*:*”作为条件Clean索引。如果定义该属性,则使用该属性定义值清除索引。不用或慎用。

postImportDeltaQuery:在全导入后,该属性被用来清理索引<!>(此处意义不明,需要查看源码)。不用或慎用。

当从关系型数据库中导入数据时,默认使用SqlEntityProcessor,由于此Processor所引入的属性如下:

query:(必须),用来查询DB的Sql语句。该语句查询得到该Entity所需要的记录和字段。对于子Entity,需要引用父Entity中的某个字段,以实现表间关联。

DeltaQuery:只在增量导入中使用。该语句提供该Entity中对应表的修改记录的主键值的集合。数据库需要有修改时间的字段,该Sql根据修改时间查询满足条件的记录。

parentDeltaQuery:只在增量导入中有效。该语句使用deltaQuery中得到的主键值集合获得父Entity改变记录的主键值的集合。

deletePkQuery: 只在增量导入中有效。该属性提供数据库中标记为删除记录的主键值。为了实现能够删除记录的同步,需要在数据库每个表中增加字段用来标识该记录需要删除。

deltaImportQuery: 只在增量导入中有效。该属性用于根Entity,如果该属性不存在,DIH会使用尝试使用query属性中的Sql语句生成查询。该属性中可以使用变量${dih.delta.<column_name>}。

query还可以携带参数:比如   select * from item  where create_time  between to_date( '${dataimporter.request.startTime}' ,'yyyy-mm-dd hh24:mi:ss') and to_date( '${dataimporter.request.endTime}' ,'yyyy-mm-dd hh24:mi:ss')

在managed-schema文件中加上字段

<!-- 基本字段 -->
<!-- 商品id -->
<field name="item_goodsid" type="long" indexed="true" stored="true"/>
<!-- 商品标题 -->
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<!-- 商品价格 -->
<field name="item_price" type="double" indexed="true" stored="true"/>
<!-- 商品图片 -->
<field name="item_image" type="string" indexed="false" stored="true" />
<!-- 商品种类 -->
<field name="item_category" type="string" indexed="true" stored="true" />
<!-- 商品卖家 -->
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<!-- 商品 品牌 -->
<field name="item_brand" type="string" indexed="true" stored="true" /> <!-- 复制域 标题+种类+卖家+品牌 -->
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/> <!-- 动态域 -->
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />
{
"id": "",
"item_goodsid": ,
"item_title": "128G的华为p30",
"item_price": 3888.8,
"item_image": "http://1.jpg",
"item_category": "手机",
"item_seller": "张三店铺",
"item_brand": "华为",
"item_spec_size": "3.5mm"
}

测试成功之后会在数据库的config文件夹自动创建dataimport.properties

#Thu Apr  :: GMT+:
item.last_index_time=-- \:\:
last_index_time=-- \:\:

估计会报这个错。  重启Solr时报错ClassNotFoundException - DataImportHandler

还有吧对应的数据库的jar包放到lib下。。。。。

使用Solr的DIH工具进行配置完成后,重启Solr后,在Solr Admin UI上报如下错误:

Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'

排查日志文件:solr_home/server/logs目录下,发现了如下错误。

Caused by: java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler

解决这个问题:

org.apache.solr.handler.dataimport.DataImportHandler这个类在这个jar包中,在solr-6.0.1/dist/solr-dataimporthandler-6.0.1.jar

把solr-6.0.1/dist/solr-dataimporthandler-6.0.1.jar复制到solr-6.0.1/server/solr-webapp/webapp/WEB-INF/lib目录下;

再重启就可以了。

query是获取全部数据的SQL
deltaImportQuery是获取增量数据时使用的SQL
deltaQuery是获取pk的SQL
parentDeltaQuery是获取父Entity的pk的SQL

Full Import工作原理
执行本Entity的Query,获取所有数据;
针对每个行数据Row,获取pk,组装子Entity的Query;
执行子Entity的Query,获取子Entity的数据。

Delta Import工作原理
查找子Entity,直到没有为止;
执行Entity的deltaQuery,获取变化数据的pk;
合并子Entity parentDeltaQuery得到的pk;
针对每一个pk Row,组装父Entity的parentDeltaQuery;
执行parentDeltaQuery,获取父Entity的pk;
执行deltaImportQuery,获取自身的数据;
如果没有deltaImportQuery,就组装Query

限制
子Entity的query必须引用父Entity的pk
子Entity的parentDeltaQuery必须引用自己的pk
子Entity的parentDeltaQuery必须返回父Entity的pk
deltaImportQuery引用的必须是自己的pk

数据导入

如果执行全量导入操作,导入前清除索引,导入后提交结果,则发送如下Url请求:

http://localhost:8983/solr/test/dataimport?command=full-import&clean=true&commit=true

如果执行增量导入操作,导入前不清除索引,导入后提交结果,发送url如下:

http://ip:port/[webdir/]数据库名字/dataimport?command=delta-import&clean=false&commit=true

解决东八区问题

我们增量部署的时候,一定要有一个时间字段来区别。solr也会有记录更新时间。但是我发现,记录的时间比当前时间要少8小时,因为solr的格式是UTC。我们是东八区,所以我们要把时间换成我们的时间。

打开bin\solr.in.cmd  找到

REM set SOLR_TIMEZONE=UTC
set SOLR_TIMEZONE=GMT+08
REM 是注释的。

然后重启,打开面板,java properties 查看时间格式是否换成功。


定时任务

准备好  定时任务的jar包   solr-dataimportscheduler-1.1.jar   扔到 WEB-INF\lib下

下solrHome文件夹  与数据库文件夹同目录下     创建config文件夹   创建  dataimport.properties

#  to sync or not to sync
# - active; anything else - inactive
# 这里的配置不用修改
syncEnabled= # which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
# 修改成你所使用的core,我这里是我自定义的core:simple
syncCores=test # solr server name or IP address
# [defaults to localhost if empty]
# 这个一般都是localhost不会变
server=localhost # solr server port
# [defaults to if empty]
# 安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port= # application name/context
# [defaults to current ServletContextListener's context (app) name]
# 这里默认不改
webapp=solr # URL params [mandatory]
# remainder of URL
# 这里改成下面的形式,solr同步数据时请求的链接
params=/dataimport?command=delta-import&clean=false&commit=true # schedule interval
# number of minutes between two runs
# [defaults to if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
# 开始测试的时候为了方便看到效果,时间可以设置短一点
interval= # 重做索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
#reBuildIndexInterval= # 重做索引的参数
#reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval**;
# 两种格式:-- :: 或者 ::,后一种会自动补全日期部分为服务启动时的日期
#reBuildIndexBeginTime=::

  

然后在web.xml中添加监听器

<listener><listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class></listener>

ok。重启就好

solr的基础和安装的更多相关文章

  1. Linux下一键安装包的基础上安装SVN及实现nginx web同步更新

    Linux下一键安装包的基础上安装SVN及实现nginx web同步更新 一.安装 1.查看是否安装cvs rpm -qa | grep subversion 2.安装 yum install sub ...

  2. 【SpringCloud之pigx框架学习之路 】1.基础环境安装

    [SpringCloud之pigx框架学习之路 ]1.基础环境安装 [SpringCloud之pigx框架学习之路 ]2.部署环境 1.Cmder.exe安装 (1) windows常用命令行工具 下 ...

  3. [ kvm ] 学习笔记 9:WebVirtMgr 基础及安装使用

    目录- 1. 前言- 2. webvirtmgr 简介- 3. webvirtmgr 部署实践    - 3.1 配置 webvirtmgr 主机    - 3.2 kvm node节点配置    - ...

  4. ELK-6.5.3学习笔记–elk基础环境安装

    本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...

  5. Apache solr 6.6.0安装

    Apache solr 6.6.0安装 最近使用了Apache solr搜索引擎框架,solr是基于lucene的一个搜索服务器,lucene也是Apache的一个开源项目:对于学习搜索引擎来说,这个 ...

  6. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...

  7. 我与solr(一)--solr的配置与安装

    感谢upxiaofeng的分享,转载自http://blog.csdn.net/zoubf/article/details/51505940 准备工作: 目前最新版本6.0.下载solr 6.0:So ...

  8. Django基础之安装配置

    安装配置 一 MVC和MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的 ...

  9. solr 4.6的安装配置

    从网上看了很多资料,很多都是老的.自己也算是结合着弄出来了. 1.下载的准备工作 tomcat8.solr4.6   具体的下载自己去找去吧.或者后期我在提供. 2.开始配置 tomcat路径:E:\ ...

随机推荐

  1. SpringBoot使用注解实现事务管理

    conttoller controller和普通的controller类一样, 不用改变 @RequestMapping(value = "/path/{id}", method ...

  2. @getMapping与@postMapping

    首先要了解一下@RequestMapping注解. @RequestMapping用于映射url到控制器类的一个特定处理程序方法.可用于方法或者类上面.也就是可以通过url找到对应的方法. @Requ ...

  3. SDOI 2019 R1游记

    $SDOI$ $2019$ $R1$游记 昨天才刚回来,今天就来写游记啦! Day -5: 做了一下去年省选的Day1,感觉很神仙. Day -4: 做了一下去年省选的Day2,感觉还是很神仙. Da ...

  4. 手把手教你实现Android RecyclerView上拉加载功能

    摘要 一直在用到RecyclerView时都会微微一颤,因为一直都没去了解怎么实现上拉加载,受够了每次去Github找开源引入,因为感觉就为了一个上拉加载功能而去引入一大堆你不知道有多少BUG的代码, ...

  5. 转://ORA-00603,ORA-27501,ORA-27300,ORA-27301,ORA-27302故障案例一则

    背景介绍: 这是一套windows的rac系统.数据库后台日志报ORA-00474:SMON process terminated with error.接着报ORA-00603,ORA-27501, ...

  6. 洛谷 P1101 单词方阵

    题目链接 https://www.luogu.org/problemnew/show/P1101 题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中 ...

  7. iOS开发基础-九宫格坐标(4)

    对iOS开发基础-九宫格坐标(3)的代码进行进一步优化. 新建一个 UIView 的子类,并命名为 WJQAppView ,将 appxib.xib 中的 UIView 对象与新建的视图类进行关联. ...

  8. Leetcode 88. Merge Sorted Array(easy)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  9. iview inoput type=textarea 禁止拉伸

    设置 :maxRows.minRows相同即可 <Input v-model="formValidate.remark" type="textarea" ...

  10. 2015年旧闻 CNNIC发布伪造CA证书

    谷歌称CNNIC发布伪造CA证书 2015-3-24 15:6:17 | 作者: 月光 | 分类: 业界动态 | 评论: 64 | 浏览: 6755   根据谷歌官方安全博客报道和Mozilla官方博 ...