配置solr.home目录

1.方法一:

修改solr5.3.3/server/webapps/solr/WEB-INF/web.xml,,取消注释,配置“env-entry-value”的值为自定义的solr索引目录

<env-entry>

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

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

</env-entry>

2.方法二:

如果方法一不好使则修改solr5.3.3/bin/solr.in.sh

SOLR_HOME=/home/solr [取消注释]

注:两个方法配置完之后,都需要重启solr,才能生效!

solr5.5:定时更新索引

solr初次创建完索引后,如何使得新增的数据自动创建增量索引呢?这就是本文我们要探讨的问题。

首先,还不知道如何创建solr索引的,请移步:Solr5.5从Mysql上导入数据

增量更新

下面说增量更新的方法,solr本身没有提供增量更新的方法,需要我们自己实现或者用插件做到,为了方便把插件地址写在下面http://wiki.apache.org/solr/DataImportHandler#Scheduling.不过遗憾的是此插件需要自己修改一下,默认加载的配置文件没有成功,请下载修改后的dihs.jar放到solr-5.5.0\server\solr-webapp\webapp\WEB-INF\lib下面,然后在solr-5.5.0\server\solr【说明:该目录是solr.home目录】下新建conf文件夹,将dataimport.properties配置文件放进去,配置文件内容如下

# dataimport.properties example
#
# From this example, copy everything bellow "dataimport scheduler properties" to your
#   dataimport.properties file and then change params to fit your needs
#
# IMPORTANT:
# Regardless of whether you have single or multiple-core Solr,
#   use dataimport.properties located in your solr.home/conf (NOT solr.home/core/conf)
# For more info and context see here:
# http://wiki.apache.org/solr/DataImportHandler#dataimport.properties_example


#Tue Jul 21 12:10:50 CEST 2010
metadataObject.last_index_time=2010-09-20 11\:12\:47
last_index_time=2010-09-20 11\:12\:47


#################################################
#                                   #
#dataimport scheduler properties
#
#                                   #
#################################################

#  to sync or not to sync
#  1 - active; anything else - inactive
syncEnabled=1

#  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
syncCores=core0,core1

#  solr server name or IP address
#  [defaults to localhost if empty]
server=localhost

#  solr server port
#  [defaults to 80 if empty]
port=8983

#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
webapp=solr

#  URL params [mandatory]
#  remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true

#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
interval=30

说明:syncCores表示要同步的cores,多个用逗号隔开;interval表示更新索引的频率,单位为分钟。

 

按照自己配置的对应修改就行了,然后找到solr-5.5.0\server\solr-webapp\webapp\WEB-INF下的web.xml文件,增加一个监听器

 <!-- Add Solr Data Import Scheduler Listener -->
  <listener>
    <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
  </listener>

配置完这些重启下solr服务,然后不出问题就可以使用了哦。

最后在说一句在生产环境中为避免solr admin页面暴露在外网环境下可以指定ip访问,方法是修改solr-5.5.0\server\etc下的jetty.xml,建一个Item节点添加如下

 <!-- Add IP Restrict Start -->
 <Item>
    <New class="org.eclipse.jetty.server.handler.IPAccessHandler">
       <Set name="white">
         <Array type="String">
            <Item>127.0.0.1</Item>
            <Item>127.0.0.2</Item>
          </Array>
       </Set>
	   <Set name="handler">
         <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
       </Set>
    </New>
   </Item>

Solr 增量导入数据原理

solr导入数据库数据创建索引时提供了full-import和delta-import两种导入方式,这篇文章主要讲解后者。

所谓delta-import主要是对于数据库(也可能是文件等等)中增加或者被修改的字段进行导入。主要原理是利用率每次我们进行import的时候在solr.home\conf下面生成的dataimport.properties文件,此文件里面有最近一次导入的相关信息。这个文件如下:

 #Wed Apr 21 16:48:27 CST 2010

 last_index_time=2010-04-21 16\:48\:24

 id.last_index_time=2010-04-21 16\:48\:24

其实last_index_time是最近一次索引(full-import或者delta-import)的时间。

通过比较这个时间和我们数据库表中的timestamp列即可得出哪些是之后修改或者添加的。

solr5.5:设置schema.xml的id为整型

在solr5.5中,schema.xml的主键id不可以设置为int类型,而必须是string类型,否则会报错。如果需要将主键id设置为int类型,需要这样设置:

把solr-5.5.0/server/solr/core0/conf中的elevate.xml的

<query text="ipod">
     <doc id="MA147LL/A" />
     <doc id="IW-02" exclude="true" />
</query>

注释掉

solr原理

1.solr原理:

我本人的理解:solr是为解决高性能的全文索引而出现的,它将用户输入的关键字进行智能分解,分解成一个个词,过滤掉一些多余的停词及空格等,比如,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎 每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。然后将分解之后的词去建好的solr索引的字段中根据词的比重逐一进行匹配,最后将符合条件的数据返回给用户。

2.分词原理:

建立索引和查询的过程中,都是以基本的语素项为单位的。基本的语素项就是通过分词得到。这个过程决定了索引单元金额最终的匹配过程。 
分词在文本索引的建立过程和用户提交检索过程中都存在。利用相同的分词器,把短语或者句子切分成相同的结果,才能保证检索过程顺利进行。

1、 英文分词的原理 
基本的处理流程是:输入文本、词汇分割、词汇过滤(去除停留词)、词干提取(形态还原)、大写转为小写、结果输出。 
2、 中文分词原理 
中文分词比较复杂,并没有英文分词那么简单。这主要是因为中文的词与词之间并不像英文中那样用空格来隔开。
主要的方法有三种:基于词典匹配的分词方法、基于语义理解的分词、基于词频统计的分词。

3.Lucene:分词器和索引文件

1、分词器

分词器,对文本资源进行切分,将字符文本串按照一定的规则切分为一个个可以进行索引的最小单位(关键词),以便检索时使用。

建立索引和进行检索时都要用到分词器。为了保证能正确的检索到结果,在建立索引与进行检索时使用的分词器应是同一个。

2、索引文件结构

索引库是一组索引文件的集合。

索引文件的检索:索引表规模相对较小,文档集合规模较大。进行检索时,先从检索索引表开始,然后找到相对应的文档。如果查询中仅包含一个关键词,则在索引表中找到该关键词,并取出它所对应的文档就可以了。如果查询中包含多个关键词,则需要将各个关键字检索出的文档记录进行合并。


索引文件的维护:维护索引常使用三个操作:插入、删除和更新文档。但是更新操作需要较高的代价,因为文档修改后(即使是很小的修改),也可以造成文档中的很多的关键词的位置发生了变化,这时需要频繁的读取和修改记录,这种代价是相当高的。因此,一般不进行更新操作,而是使用“先删除,后创建”的方式代替更新操作。

3、常用的中文分词器

ik-analyzer:IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。
Ansj:Ansj中文分词是一款纯Java的主要应用于自然语言处理的高精度的中文分词。追求的目标是--准确-高效-自由。包括:中文分词、人名识别、地名识别、组织机构名识别、多级词性标注、关键词提取、指纹提取支持行业词典、用户自定义词典。Ansj 是基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高。
在线演示:http://ansj.sdapp.cn/demo/seg.jsp
官网地址:http://www.ansj.org/
Github地址:https://github.com/ansjsun/ansj_seg
mmseg4j:用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/)实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。
imdict-chinese-analyzer:imdict-chinese-analyzer 是 imdict智能词典 的智能中文分词模块,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene搜索引擎提供简体中文分词支持。
ictclas4j:ICTCLAS4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。关于ICTCLAS分词系统的讨论,请访问google group关于ictclas分词系统的讨论组http://groups.google.com/group/ictclas
ICTCLAS汉语分词系:http://ictclas.org/

4.solr的配置文件:

(1)solr.xml
 与整个搜索引擎相关的配置。
(2)solrconfig.xml
 与某个core相关的主要配置,如定义updatehandler用于索引文件,requesthandler用于搜索内容等。
(3)schema.xml
 定义了某类型文档的索引格式。