ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
……
在index的analyzer中使用solr.WhitespaceTokenizerFactory这个分词包,就是空格分词,然后使用solr.StopFilterFactory,solr.WordDelimiterFilterFactory,solr.LowerCaseFilterFactory,solr.EnglishPorterFilterFactory,solr.RemoveDuplicatesTokenFilterFactory这几个过滤器。
在向索引库中添加text类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。
Solr的analysis包并没有带支持中文的包,在第二篇文章中详细讲了怎样添加mmseg4j中文分词器,详情请参见
2、接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段),就是filed,filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否有多个值)等等。
例:
field的定义相当重要,有几个技巧需注意一下,对可能存在多值得字段尽量设置multiValued属性为true,避免建索引是抛出错误;如果不需要存储相应字段值,尽量将stored属性设为false。
3、建议建立了一个拷贝字段,将所有的全文字段复制到一个字段中,以便进行统一的检索:
并在拷贝字段结点处完成拷贝设置:
注:
“拷贝字段”就是查询的时候不用再输入:
userName:
张三anduserProfile:
张三的个人简介。
直接可以输入"张三"就可以将“名字”含“张三”或者“简介”中含“张三”的又或者“名字”和“简介”都含有“张三”的查询出来。
他将需要查询的内容放在了一个字段中,并且默认查询该字段设为该字段就行了。
4、除此之外,还可以定义动态字段,所谓动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个dynamicField,name为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:
name_i,gender_i,school_i等。
schema.xml配置文件大体上就是这样,更多细节请参见solrwikihttp:
//wiki.apache.org/solr/SchemaXml。
如果有什么问题,请与我联系,我会和你共同探讨。
四、SOLR搭建企业搜索平台--MultiCore
SolrMulticore是solr1.3的新特性。
其目的一个solr实例,可以有多个搜索应用。
我们知道你既可以把不同类型的数据放到同一index中,也可以使用分开的多indexes。
基于这一点,你只需知道如何使用多indexes(实际上就是运行Solr的多实例)。
尽管如此,为每一个类型添加一个完整的Solr实例会显得太臃肿庞大。
Solr1.3引入了Solrcore的概念,该方案使用一个Solr实例管理多个indexes,这样就有热点core(hotcore)的重读(reloading)与交换(swap,通常是读index与写index交换),那么管理一个core或index也容易些。
每个Solrcore由它自己的配置文件和索引数据组成。
在多core执行搜索和索引几乎和没有使用core一样。
你只是添加core的名字为各自不同的URL。
单core情况下的如下搜索:
http:
//localhost:
8983/solr/select?
q=dave%20matthews
在多core环境下,你可以通过如下方式访问一个名为mbartists的core:
http:
//localhost:
8983/solr/core0/select?
q=dave%20matthews
并非在URL中引入corename的参数名值对,而是用不同的context。
这样就可以像在单core中执行你的管理任务,搜索,更新操作。
1、找到solr下载包中的example文件夹,在它的下面有个multicore文件夹,将这个文件夹下面的core0、core1和solr.xml拷贝到c:
\solr-tomcat\solr下面。
注意:
有一个solr.xml(这只是默认文件,当然也可以指定别的文件),如:
xmlversion="1.0"encoding="UTF-8"?
>
这个文件是告诉solr应该加载哪些core,……里有core0、core1。
core0(可以类比以前的solr.home)/conf目录下有schema.xml与solrconfig.xml,可以把实际应用的复制过来。
2、启动tomcat,访问应用,就可以看到有Admincore0和Admincore1
3、采用上面的默认solr.xml,索引文件将存放在同一个目录下面,在这里将存放在C:
\solr-tomcat\solr\data,如果你想更改目录,或者两个应用存放在不同的目录,请参见下面的xml。
一些关键的配置值是:
1.Persistent="false"指明运行时的任何修改我们不做保存。
如拷贝。
如果你想保存从启动起的一些改动,那就把persistent设置为true。
如果你的index策略是完成建index到一个纯净的core中然后交换到活动core那么你绝对应该设为true。
sharedLib="lib"指明了所有core的jar文件的lib目录。
如果你有一个core有自己需要的jar文件,那么你可以把他们置入到core/lib目录。
例如:
karaokecore使用SolrCell来索引化富文本内容,因此那些用来解析和抽取富文本的jar文件被放到./examples/cores/karaoke/lib/.
为何使用多core?
Solr实例支持多core比启用多index要好(domore)。
多core同时解决了在生产环境下的一些关键需求:
1.重建索引
2.测试配置变更
3.合并索引
4.运行时重命名core
为何多core不是默认的?
多core是1.3版本中才加的,1.4后更成熟。
我们强烈建议你使用多core,既是你现在的solr.xml只配置了一个core,虽然会比单个索引稍复杂,但可以带来管理core上的好处。
或许一天单个core可能最终RELOADandSTATU