Solr 是一个可供企业使用的 基于 Lucene 的开箱即用的搜索服务器 对Lucene不熟?那么建议先看看下面两篇文档
实战Lucene 第 部分 初识 Lucene lo lucene /
用Lucene加速Web搜索应用程序的开发 lucene /
一 solr介绍
solr是基于Lucene Java搜索库的企业级全文搜索引擎 目前是apache的一个项目 它的官方网址在 solr需要运行在一个servlet 容器里 例如tomcat solr在lucene的上层提供了一个基于HTTP/XML的Web Services 我们的应用需要通过这个服务与solr进行交互
二 solr安装和配置
关于solr的安装和配置 这里也有两篇非常好的文档 作者同时也是 Lucene Java 项目的提交人和发言人
使用Apache Solr实现更加灵巧的搜索 solr /l
solr /l
下面主要说说需要注意的地方
Solr的安装非常简单 下载solr的zip包后解压缩将dist目录下的war文件改名为solr war直接复制到tomcat 的webapps目录即可 注意一定要设置solr的主位置 有三种方法 我采用的是在tomcat里配置java p/env/solr/home的一个JNDI指向solr的主目录(example目录下) 建立/tomcat /conf/Catalina/localhost/solr xml文件
<Context docBase= D:/solr war debug= crossContext= true ><Environment name= solr/home type= java lang String value= D:/solr/solr override= true /></Context>
观察这个指定的solr主位置 里面存在两个文件夹 conf和data 其中conf里存放了对solr而言最为重要的两个配置文件schema xml和solrconfig xml data则用于存放索引文件
schema xml主要包括types fields和其他的一些缺省设置
solrconfig xml用来配置Solr的一些系统属性 例如与索引和查询处理有关的一些常见的配置选项 以及缓存 扩展等等
上面的文档对这两个文件有比较详细的说明 非常容易上手 注意到schema xml里有一个
<uniqueKey>url</uniqueKey>
的配置 这里将url字段作为索引文档的唯一标识符 非常重要
三 加入中文分词
对全文检索而言 中文分词非常的重要 这里采用了qieqie庖丁分词(非常不错 )) 集成非常的容易 我下载的是 alpha 版本 其中它支持最多切分和按最大切分 创建自己的一个中文TokenizerFactory继承自solr的BaseTokenizerFactory
/** * Created by IntelliJ IDEA * User: ronghao * Date: * Time: : : * 中文切词 对庖丁切词的封装 */ public class ChineseTokenizerFactory extends BaseTokenizerFactory { /** * 最多切分 默认模式 */ public static final String MOST_WORDS_MODE = most words /** * 按最大切分 */ public static final String MAX_WORD_LENGTH_MODE = max word length private String mode = nullpublic void setMode(String mode) { if (mode==null||MOST_WORDS_MODE equalsIgnoreCase(mode) || default equalsIgnoreCase(mode)) { this mode=MOST_WORDS_MODE} else if (MAX_WORD_LENGTH_MODE equalsIgnoreCase(mode)) { this mode=MAX_WORD_LENGTH_MODE} else { throw new IllegalArgumentException( 不合法的分析器Mode 参数设置: + mode)} } @Override public void init(Map args) { super init(args)setMode(args get( mode ))} public TokenStream create(Reader input) { return new PaodingTokenizer(input PaodingMaker make() createTokenCollector())} private TokenCollector createTokenCollector() { if( MOST_WORDS_MODE equals(mode)) return new MostWordsTokenCollector()if( MAX_WORD_LENGTH_MODE equals(mode)) return new MaxWordLengthTokenCollector()throw new Error( never happened )} }
在schema xml的字段text配置里加入该分词器
<fieldtype name= text class= solr TextField positionIncrementGap= >
<*** yzer type= index >
<tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words /> <filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />
<filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />
<filter class= solr LowerCaseFilterFactory />
<filter class= solr RemoveDuplicatesTokenFilterFactory />
</ *** yzer>
<*** yzer type= query >
<tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words />
<filter class= solr SynonymFilterFactory synonyms= synonyms txt ignoreCase= true expand= true />
<filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />
<filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />
<filter class= solr LowerCaseFilterFactory />
<filter class= solr RemoveDuplicatesTokenFilterFactory />
</ *** yzer>
</fieldtype>
完成后重启tomcat 即可在
体验到庖丁的中文分词 注意要将paoding *** ysis jar复制到solr的lib下 注意修改jar包里字典的home
四 与自己应用进行集成
Solr安装完毕 现在可以将自己的应用与solr集成 其实过程非常的简单 应用增加数据——>根据配置的字段构建add的xml文档——>post至solr/update
应用删除数据à根据配置的索引文档唯一标识符构建delete的xml文档——>post至solr/update
检索数据à构建查询xml—>get至/solr/select/——>对solr返回的xml进行处理——>页面展现
具体的xml格式可以在solr网站找到 另外就是solr支持高亮显示 非常方便
关于中文 solr内核支持UTF 编码 所以在tomcat里的server xml需要进行配置
<Connector port= maxHttpHeaderSize= URIEncoding= UTF …/>
另外 向solr Post请求的时候需要转为utf 编码 对solr 返回的查询结果也需要进行一次utf 的转码 检索数据时对查询的关键字也需要转码 然后用 + 连接
String[] array = StringUtils split(query null )for (String str : array) { result = result + URLEncoder encode(str UTF ) + + }
lishixinzhi/Article/program/Java/hx/201311/259841)System Update 系统更新
使用一个具有 sudo 权限的非 root 用户登录你的 Ubuntu 服务器,在接下来的所有安装和使用 Solr 的步骤中都会使用它。
登录成功后,使用下面的命令,升级你的系统到最新的更新及补丁:
$ sudo apt-get update
2) 安装 JRE
要安装 Solr,首先需要安装 JRE (Java Runtime Environment) 作为基础环境,因为 solr 和 tomcat 都是基于Java.所以,我们需要安装最新版的 Java 并配置 Java 本地环境.
要想安装最新版的 Java 8,我们需要通过以下命令安装 Python Software Properties 工具包
$ sudo apt-get install python-software-properties
完成后,配置最新版 Java 8的仓库
$ sudo add-apt-repository ppa:webupd8team/java
现在你可以通过以下命令更新包源列表,使用‘apt-get’来安装最新版本的 Oracle Java 8。
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
在安装和配置过程中,点击'OK'按钮接受 Java SE Platform 和 JavaFX 的Oracle 二进制代码许可协议Oracle Binary Code License Agreement。
在安装完成后,运行下面的命令,检查是否安装成功以及查看安装的版本。
kash@solr:~$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
执行结果表明我们已经成功安装了 Java,并达到安装 Solr 最基本的要求了,接着我们进行下一步。
安装 Solr
有两种不同的方式可以在 Ubuntu 上安装 Solr,在本文中我们只用最新的源码包来演示源码安装。
要使用源码安装 Solr,先要从官网下载最新的可用安装包。复制以下链接,然后使用 'wget' 命令来下载。
$ wget http://www.us.apache.org/dist/lucene/solr/5.3.1/solr-5.3.1.tgz
运行下面的命令,将这个已归档的服务解压到 /bin 目录。
$ tar -xzf solr-5.3.1.tgz solr-5.3.1/bin/install_solr_service.sh --strip-components=2
运行脚本来启动 Solr 服务,这将会先创建一个 solr 的用户,然后将 Solr 安装成服务。
$ sudo bash ./install_solr_service.sh solr-5.3.1.tgz
Solr 安装
使用下面的命令来检查 Solr 服务的状态。
$ service solr status
Solr 状态
创建 Solr 集合:
我们现在可以使用 Solr 用户添加多个集合。就像下图所示的那样,我们只需要在命令行中指定集合名称和指定其配置集就可以创建多个集合了。
$ sudo su - solr -c "/opt/solr/bin/solr create -c myfirstcollection -n data_driven_schema_configs"
创建集合
我们已经成功的为我们的第一个集合创建了新核心实例目录,并可以将数据添加到里面。要查看库中的默认模式文件,可以在这里找到: '/opt/solr/server/solr/configsets/datadrivenschema_configs/conf' 。
使用 Solr Web
可以使用默认的端口8983连接 Apache Solr。打开浏览器,输入 http://your_server_ip:8983/solr 或者 http://your-domain.com:8983/solr. 确保你的防火墙允许8983端口.
http://172.25.10.171:8983/solr/
Web访问Solr
在 Solr 的 Web 控制台左侧菜单点击 'Core Admin' 按钮,你将会看见我们之前使用命令行方式创建的集合。你可以点击 'Add Core' 按钮来创建新的核心。
添加核心
就像下图中所示,你可以选择某个集合并指向文档来向里面添加内容或从文档中查询数据。如下显示的那样添加指定格式的数据。
{
"number": 1,
"Name": "George Washington",
"birth_year": 1989,
"Starting_Job": 2002,
"End_Job": "2009-04-30",
"Qualification": "Graduation",
"skills": "Linux and Virtualization"
}
添加文件后点击 'Submit Document'按钮.
1.2. tomcat调优调优tomcat 加大内存和连接数
MaxThread 500
MinSpareThread 25
MaxSpareThread75
Xmx 1024M
1.3. 操作系统网络参数优化
用做测试的各台服务器,均在/etc/sysctl.conf配置文件中增加如下内核参数:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5
1.4. 下载solr
下载地址:http://lucene.apache.org/solr/
详情请见:http://lucene.apache.org/solr/
2. 安装过程
2.1. 安装tomcat6
安装完tomcat后修改./conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
注:如果没有设置URIEncoding="UTF-8",在提交查询的select的url会出现乱码,当然也就查不到了。
2.2. 拷贝solr.war
将下载的solr包下面的dist文件夹中的apache-solr-1.4.1.war 拷贝到 tomcat的webapps 并且改名为 solr.war 一般情况下会自动生成相应的文件夹。
2.3. 拷贝其它
新建/opt/solr-tomcat/solr文件夹,把下载的solr包中的example/solr文件夹下面的所有文件放入到/opt/solr-tomcat/solr里面。
2.4. 配置solr.home
最后一步 配置添加solr.home环境变量,可以有二种方式(两种取其一即可):
a)基于环境变量
linux在当前用户的环境变量中(.bash_profile)或在./bin/catalina.sh中添加如下环境变量:
export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr"
b)基于JNDI
在tomcat的conf文件夹建立Catalina文件夹,然后在Catalina文件夹中在建立localhost文件夹,在该文件夹下面建立 solr.xml,Xml代码:
<Context docBase="/usr/local/tomcat6/webapps/solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="Java.lang.String" value="/opt/solr-tomcat/solr" override="true" />
</Context>
注:如果没有设定solr.solr.home环境变量或JNDI的情况下,Solr查找./solr,因此在启动时候需要切换到/opt/solr-tomcat
3. 验证安装
访问solr管理界面 http://ip:port/solr
3.1. 打开管理后台
打开浏览器,输入:http://192.168.10.85:18080/solr/admin/
(注:多核心时为这个地址http://192.168.10.85:18080/solr/,首页会列出多核的链接,点击进入),就可以访问solr服务了
3.2. 如果出现如下图示,表示配置成功
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)