solr以及ik分词器简介

  • 介绍

solr简介、ik分词器简介

 

 

1、solr简介… 1

1.1、什么是lucene?… 1

1.2、lucene和solr是什么关系?… 1

2、Solr安装,配置… 2

3、IK分词器安装,配置… 4

4、solrj查询接口… 5

5、solr在jetty服务器上运行… 6

6、项目引入Solr时应该考虑的一些问题… 7

1、solr简介

Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。

1.1、什么是lucene?

Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为 你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于 Lucene ,比如Eclipse 帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。

    1.2、lucene和solr是什么关系?

Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。 Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展。

Solr使用Lucene并且扩展了它!

  • 一个真正的拥有动态字段(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema)
  • 对Lucene查询语言的强大扩展!
  • 支持对结果进行动态的分组和过滤
  • 高级的,可配置的文本分析
  • 高度可配置和可扩展的缓存机制
  • 性能优化
  • 支持通过XML进行外部配置
  • 拥有一个管理界面
  • 可监控的日志
  • 支持高速增量式更新(Fast incremental Updates)和快照发布(Snapshot Distribution)

因为solr是基于Lucene的,他们底层的概念都是一样的。读者如果初学solr,对lucene不了解的话,可以先大概了解一下lucene。以下有两篇很好的关于lucene的介绍文章:

http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/#ibm-pcon

http://www.ibm.com/developerworks/cn/java/wa-lucene/

为了对文档进行索引,Lucene 提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer, Directory。读完以上两篇文章,读者应该了解这些基础类有什么作用。

2、Solr安装,配置

Solr是一个Web应用,需要部署在Servlet容器中运行,本例使用Tomcat作为Servlet容器(官方发布包中示例使用Jetty)

1:下载solr发布包(本文档以solr4.9为例进行说明)

官网地址:solr/">http://lucene.apache.org/solr/

选择Past versions标红的地方,选择需要使用的solr发布包,点击下载,或者复制下载地址到迅雷下载都行。

2:解压下载的发布包,将solr\solr-4.9.0\example\webapps下的solr.war拷贝到tomcat的webapp目录下,启动tomcat(解压solr.war)

3:在任意位置创建solr_home目录,比如:E:/solr/solr_home

4:在tomcat的webapp的solr项目中修改web.xml文件,添加如下配置,默认是注释的

<env-entry>

<env-entry-name>solr/home</env-entry-name>

<env-entry-value>E:/solr/solr_home</env-entry-value>

<env-entry-type>java.lang.String</env-entry-type>

</env-entry>

5:在解压的solr-4.9.0目录的如下地址中solr-4.9.0/example/solr/将里面的所有内容copy到solr_home中

6:将solr-4.9.0\example\lib\ext下的所有的jar包拷贝到apache-tomcat-7.0.54\webapps\solr\WEB-INF\lib下启动tomcat。

如果启动报错,检查你的tomcat使用的jdk,需要使用jdk1.7+才行。

7:启动成功后,在浏览器中输入solr">http://localhost:2222/solr 检查是否能够访问。访问成功后页面如下:

参考地址:

1:http://my.oschina.net/xiaoen/blog/343816

2:http://blog.csdn.net/zhyh1986/article/details/9856115

3、IK分词器安装,配置

1:下载地址:IK-Analyzer-2012FF">http://git.oschina.net/wltea/IK-Analyzer-2012FF

2:解压IK Analyzer 2012FF_hf1.zip,获得IK Analyzer 2012FF_hf1。将该目录下的IKAnalyzer.cfg.xml,stopword.dic放到之前安装 TOMCAT_HOME/webapps/solr/WEB-INF/classes目录下(没有就创建classes文件夹) IKAnalyzer2012FF_u1.jar放到之前安装的TOMCAT_HOME/webapps/solr/WEB-INF/lib目录下

3:修改/solr_home/collection1/conf/中的schema.xml中增加如下内容:

<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>

同时修改filed 使filed引用text_ik.这样才能使用IK分词器。

<field name=”name” type=”text_ik” indexed=”true” stored=”true”/>

4:在solr应用中测试,示例如下图:

5:修改E:\solr\solr_home\collection1\conf\solrconfig.xml文件配置生成的索引文件路径,示例如下:

<dataDir>${solr.data.dir:E:/solr/solr_home/data}</dataDir>

4、solrj查询接口

1:HttpSolrServer

2:SolrInputDocument

3:SolrQuery

4:QueryResponse

5:SolrDocumentList

5、solr在jetty服务器上运行

1:确保你的机器上已经安装了jdk1.6+

2:使用java –version 查看你的jdk版本

3:cmd后进入solr的解压目录,进入example例如:E:\solr\solr-4.9.0\example

4:使用java –jar start.jar启动jetty服务器

5:在浏览器地址栏中输入:solr">http://localhost:8983/solr 查看是否启动成功。

6:当启动样例服务器的时候,并不会产生太多的问题。最常见的导致服务器不能启动的问题是默认的 8983 端口已经被另外的进程占用。如果是这个问题的话,将会看到类似“java.net.BindException: Address already in use”这样的异常信息。这个问题很容易解决,只需要改变 Solr 绑定的端口即可。改变端口可以在启动的时候通过命令行指定 Jetty 使用的端口:java -Djetty.port=8080 -jar start.jar。使用这个命令后,Jetty 将绑定到 8080 端口。

7:停止 Solr

如果是本地操作,那么你可以在命令行窗口使用 Ctrl-c 来结束进程。通常,对于开发和测试来说,这已经足够安全。Jetty 也提供了一个更安全的机制来停止服务器,这个我们以后再讨论。

6、solr.cc/blog/?p=788">项目引入Solr时应该考虑的一些问题

1、数据更新频率:每天数据增量有多大,随时更新还是定时更新
2、数据总量:数据要保存多长时间
3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
4、数据特点:数据源包括哪些,平均单条记录大小
5、业务特点:有哪些排序要求,检索条件
6、资源复用:已有的硬件配置是怎样的,是否有升级计划

 

  • 参考

本文为原创,如果您当前访问的域名不是surenpi.com,请访问“素人派”。

发表评论

电子邮件地址不会被公开。 必填项已用*标注