资源描述
Solr和ElasticSearch的单机环境搭建
一、 Solr环境搭建
1. Solr简介
Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用 Solr 创建的索引。
2. Solr的工作
① 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
② 实时分析的分布式搜索引擎。
③ 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
3. Solr的优点
1、无结构化的自然语言文本为中心;
2、信息浏览占主导地位的用户需求;
3、以Document这种扁平化并且独立的结构组织信息(区别与关系型数据库);
4、要求组织成的数据模式灵活多变(不像数据库表一样要求统一的字段)。
4. Solr环境搭建的准备
1. Solr安装包最新版本是Solr6.2.1(截止2016.10.13):http://www-eu.apache.org/dist/lucene/solr/6.2.1/solr-6.2.1.zip
2. Tomcat作为服务器(Tomcat9)
http://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.0.M11/bin/apache-tomcat-9.0.0.M11-windows-x64.zip
3. IK中文分词插件(或者MMSeg4J中文分词插件)
IK分词插件现在支持到5.5.x的Solr,不过在Solr6.2.1上还是可以用的
MMSeg4J 最新版本2.3.0
4. 操作系统Windows10
5. 开始环境搭建
1. 解压Tomcat到本地磁盘X,根据需要命名,此处我们命名为Tomcat
2. 解压Solr6.2.1到磁盘任意位置,在这里我们解压到与Tomcat同级目录下,并且命名为solr
3. 进入solr目录,依次进./server/solr-webapp目录,在此目录下有webapp文件夹
复制此文件夹到Tomcat目录下的webapps文件夹下,并且根据需要命名,此处我们命名为solr如下图所示
4. 将Solr目录下server/lib/ext目录下的所有jar包复制到Tomcat目录下webapps/solr/WEB-INF/lib下(图片请放大观看)
5. 将solr\server\resources目录下的log4j.properties文件拷贝到Tomcat\webapps\solr\WEB-INF\classes下,若不存在classes文件夹,需要手动创建一个
6. 在Tomcat/webapps/solr目录下新建solrhome文件夹(此处根据需要命名),这是solr的core存放目录。
7. 将solr/server/solr下的所有文件复制到solrhome中(实测证明只需要solr.xml即可,如果在集群分布式系统下,可能需要zoo.cfg)
8. 进入Tomcat/webapps/solr/WEB-INF/目录下,找到web.xml并打开编辑。修改如下代码
<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->
效果如下图所示
9. 进入Tomcat/bin目录,运行startup.bat。
10. 打开浏览器,访问http://localhost:8080/solr/index.html,如果看到如下界面说明安装成功
6. 为solr创建core
1. 在Tomcat/webapps/solr/solrhome下新建文件夹,根据需要命名,此处我 们命名为 core0
2. 进入core文件夹,新建文本文档命名为core.properties,以文本方式打 开,在里面添加
name=core0
保存并关闭
3. 将solr/example/example-DIH/solr/solr下的conf文件夹复制到 Tomcat/webapps/solr/solrhome/core0下
4. 将solr/dist下的solr-dataimporthandler-6.2.1.jar和 solr-dataimporthandler-extras-6.2.1.jar复制到 Tomcat/webapps/solr/WEB-INF/lib中
5. 此时重启Tomcat,(启动过程中可能会报错,如果是缺少jar包的话,就去solr的包里找,复制到WEB-INF/lib中)打开http://localhost:8080/solr/index.html就会发现添加了core0
7. 为solr的core添加数据源
以oracle为例,数据库中有如下表
表结构如下
1. 找到Tomcat/webapps/solr/solrhome/core0/conf下的solr-data-config.xml,复制一份到此目录下,根据需要命名,此处我们命名为test-data-config.xml。编辑此文件
<dataConfig>
<document>
<entity name="sep" processor="SolrEntityProcessor"
url="http://127.0.0.1:8983/solr/db "
query="*:*"
fl="*,orig_version_l:_version_,ignored_price_c:price_c"/>
</document>
</dataConfig>
修改为
<dataConfig>
<dataSource name="自定义名称" type="JdbcDataSource (type可选,默认是jdbc,另外还有HttpDataSource等)" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//数据库地址/数据库名" user="用户名" password="密码"/>
<document>
<entity name="表名" dataSource="oracleDS" pk="id" query="SELECT * FROM 表名(sql语句根据需求写)" transformer="DateFormatTransformer">
<field column="表中列名" name="fields的名称自定义"/>
<field column="表中列名" name="fields的名称自定义"/>
</entity>
</document>
</dataConfig>
在我们的数据库中可以写为
2. 编辑Tomcat/webapps/solr/solrhome/core0/conf下的solrconfig.xml文件,找到
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">solr-data-config.xml</str>
</lst>
</requestHandler>
修改<str name="config">solr-data-config.xml</str>,将其改为
<str name="config">test-data-config.xml</str>
3. 进入Tomcat/webapps/solr/solrhome/core0/conf,在solr5以上默认使用 managed-schema进行管理,但是我们仍然可以通过编写schema.xml对 数据格式进行设置。新建schema.xml,以文本方式打开,并且添加以下 内容
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="自定义名称" version="1.5">
< types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
<fieldtype name="binary" class="solr.BinaryField"/>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
<fieldType name="pint" class="solr.IntField"/>
<fieldType name="plong" class="solr.LongField"/>
<fieldType name="pfloat" class="solr.FloatField"/>
<fieldType name="pdouble" class="solr.DoubleField"/>
<fieldType name="pdate" class="solr.DateField" sortMissingLast="true"/>
<fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="random" class="solr.RandomSortField" indexed="true" />
</types>
<fields>
<field name="id" type="int" indexed="true" stored="true" required="true" />
<field name="name" type="string" indexed="true" stored="true" multiValued="false" />
<dynamicField name="ignored_*" type="ignored" multiValued="true"/>
</fields>
<uniqueKey> ID</uniqueKey>
<copyField source="id" dest="int"/>
<copyField source="name" dest="text"/>
</schema>
注意红字部分,根据需求写,其中type="string" type是上面fieldType中定义的
<uniqueKey> ID</uniqueKey>
必填,ID与表中的主键ID一致。
4. 将ojdbc.jar(如果是MySQL的话就是mysql-jdbc)的jar包复制到Tomcat/webapps/solr/WEB-INF/lib下
5. 浏览器访问http://localhost:8080/solr/index.html,在左边选中core0,点击dataimport按钮,选择我们需要的实体,执行导入
6. 点击左侧query按钮,可以执行查询操作
8. 为solr的core添加分词器
分词器有多个,在此我们只讨论最常用的两个,MMSeg4J和IKAnalyzer
1. MMSeg4J的添加
1) 将mmseg4j-core-1.10.0.jar和mmseg4j-solr-2.3.0.jar复制到 Tomcat/webapps/solr/WEB-INF/lib下
2) 将词库放在磁盘某个目录下比如,我们将词库放在了 D:\Solr\Tomcat\webapps\solr\solrhome\dic这个目录下,将词库重命名为以words开头的dic类型的文件,比如words-my.dic,wordsmy.dic,words_my.dic。
3) 在Tomcat/webapps/solr/solrhone/core0/conf/下,修改managed-schema在<types>标签里面添加如下代码,其中红字是词典位置路径(绝对路径),mmseg4j会自动读取words开头的dic文件。
<!--手动配置MMSeg4j分词器-->
<fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="D:\Solr\Tomcat\webapps\solr\solrhome\dic"/>
</analyzer>
</fieldType>
<fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="D:\Solr\Tomcat\webapps\solr\solrhome\dic"/>
</analyzer>
</fieldType>
<fieldType name="textSimple" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="D:\Solr\Tomcat\webapps\solr\solrhome\dic"/>
</analyzer>
</fieldType>
4) 重启Tomcat,此时我们就可以在浏览器中使用Analyze功能了
2. IKAnalyzer的添加(以下简称IK)
1) 和MMSeg4j一样,先把IKr的jar包放入Tomcat/webapps/solr/WEB-INF/lib目录下。
2) 将IK的词库放在D:\Solr\Tomcat\webapps\solr\solrhome\dic目录下,根据需要命名,其中mydic是词库,stopword是停词词库。
3) 复制IKAnalyzer.cfg.xml到\Tomcat\webapps\solr\WEB-INF\classes目录下, 打开并修改以下内容
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典
<entry key="ext_dict">mydict.dic;</entry>
-->
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
注意,路径是相对于classes文件夹的相对路径
4) 以文本方式编辑Tomcat/webapps/solr/solrhome/core0/conf目录下的 managed-schema文件,在后面添加以下内容
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
保存并退出。
5) 重启Tomcat,访问http://localhost:8080/solr/index.html#/core0/analysis点击选择text_ik即可使用IK分词器
9. 其他
至此为止Solr在windows上的搭建基本完成,更多的Solr操作可以参考网上的教程,在此不再赘述。
另外,Linux上的环境搭建与Windows类似。
二、 ElasticSearch环境搭建
1. Elastic简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
2. Elastic的优点
1. Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
2. Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
3. 处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
4. Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
5. 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
3. Elastic环境搭建准备工作
1. 操作系统为Ubuntu16.1,由于Elastic对Windows支持不是很好,很多操作在Windows无法完成或者需要安装很多其他辅助软件,所以我们选择在Linux系统上搭建这个环境
2. Java JDK1.8 for linux,Elastic 2.x版本不再支持JDK1.7以下的版本,注意压缩版是tar.gz格式,千万别搞错。
3. Elastic安装包,下载地址如下,格式跟上面一样https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz
4. 我们选择的ElasticSearch是2.3.4版本(截止2016.10.13最新版本为2.4.1),
之所以选择这个版本是因为如果我们要连接数据库作为数据源的话,需要Elasticsearch-jdbc作为驱动来连接,而这个驱动最新版本为2.3.4,为了避免驱动不兼容的问题,我们选择这个版本。
5. Elasticsearch-jdbc驱动http://xbib.org/repository/org/xbib/elasticsearch/importer/elasticsearch-jdbc/2.3.4.1/elasticsearch-jdbc-2.3.4.1-dist.zip
6. Elasticsearch Head插件,这是一个可以在网页上对Elastic进行可视化操作的插件。
7. Ojdbc驱动或者MySQL-jdbc驱动jar包
4. 开始环境搭建
1. 解压JDK到磁盘目录,可以在终端使用unzip filename命令,也可使用ubuntu自带的归档管理器进行解压,解压完成之后的文件目录如下图
2. 下面就要配置Java的环境变量,由于普通用户没有更改权限,所以我们要先为要更改的文件设置权限。(更改profile会使环境变量对这台机器上的所有用户都生效,比较稳妥的办法是更改个人目录下.bash_profile这个文件,这样可以使环境变量只对此用户生效,和下面类似(这是个隐藏文件,需要ls -a命令才能看到))
打开终端,输入命令
cd /etc
sudo su (输入你的密码,之后就会进入root用户权限)
chmod 777 profile
exit
为profile这个文件更改权限,然后退出root
之后有两种方法,一种是通过文件浏览器进入/etc目录,用自带的编辑器修改并保存另一种是用vi编辑器:
继续输入
vi profile
进入vi编辑器,注意,这是是命令行模式,是不能对文件进行编辑的,可以使用方向键将光标移动至文件末尾,按 i 键进入编辑模式,在文件末尾添加如下(如果输入错误,在请不要按backspace键删除,要按delete键)
export JAVA_HOME=/usr/share/jdk1.6.0_14 (你的jdk目录)
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
完成后,按esc,退出编辑模式,进入命令行模式,按下:键(shift + ;),进入底行模式,输入wq回车。然后注销重新登录。
打开终端输入 java -version 回车,如果出现如下图所示的界面,说明安装成功
3. 解压Elasticsearch,然后进入elastic根目录下的bin文件夹,输入命令 ./elsticsearch回车,
之后Elastic就会启动,大概如下图所示
4. 然后浏览器打开http://localhost:9200/如果出现说明安装成功。
5. 安装插件
在elastic根目录下新建plugins文件夹,将head插件包解压缩到plugins目录下,并且重命名为head。
重启elastic,浏览器输入http://localhost:9200/_plugins/head/出现如下所示说明安装成功
6. 连接Oracle数据库
1. 将elasticsearch-jdbc解压到磁盘(最好是elastic根目录,方便),重命名为jdbc(不重命名也可)。
2. 进入jdbc/bin看到如下图所示文件目录
3. 复制oracle-connection-properties.sh到bin文件夹的上级目录。并重命名(也可直接修改这个文件,在这里我们为了方便使用和不造成目录的混乱,选择将其复制到Elastic根目录下 重命名为oracle.sh)
4. 修改此文件
#!/bin/sh (sh根据你使用的shell来写,比如在我的机器上这样写是无法运行的,要改成#!/bin/sh才能正常运行)
# This example is a template to connect to Oracle
# The JDBC URL and SQL must be replaced by working ones.
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
bin=${DIR}/../bin
lib=${DIR}/../lib
(JDBC的路径这里DIR定义了sh文件的路径,bin和lib的路径就可以在这个路径后面接着添加,这就是上面我们为什么把sh文件放在elastic根目录下的原因)
echo '
{
"type" : "jdbc",
"jdbc" : {
"url" : "jdbc:oracle:thin:@//host:1521/sid",oracle数据库的地址
"connection_properties" : {
"oracle.jdbc.TcpNoDelay" : false,
"useFetchSizeWithLongColumn" : false,
".CONNECT_TIMEOUT" : 10000,
"oracle.jdbc.ReadTimeout" : 50000
},
"user" : "user",
"password" : "password",
"sql" : "select or_id as \"_id\", or_tan as \"tan\" from orders",查询语句
"index" : "myoracle", 索引名称
"type" : "myoracle", 类型名称
"elasticsearch" : {
"cluster" : "elasticsearch", 簇的名称,要跟设置的一致
"host" : "localhost", 地址
"port" : 9300 端口
},
"max_bulk_actions" : 20000,
"max_concurrent_bulk_requests" : 10,
"index_settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replica" : 0
}
}
}
}
' | java \
-cp "${lib}/*" \
-Dlog4j.configurationFile=${bin}/log4j2.xml \
org.xbib.tools.Runner \
org.xbib.tools.JDBCImporter
5. 保存文件,打开浏览器,进入head插件,新建index,名字要和oracle中的Index一致。
6. 打开终端,进入oracle.sh所在目录,输入./oracle.sh回车,等待运行成功。
7. 此时在浏览器刷新即可看到数据。
展开阅读全文