solr是基于lucene的全文检索服务器。
全文检索大体分两个过程,索引创建(Indexing)和搜索索引(Search)。
索引库:两部分组成:索引域,文档域(document)。
文档域:即我们存入的数据(但必须按照存在的Field属性存入属性。)
Field: 相当于属性名(相当于数据库字段名)
得到数据源,将数据源(document),经过分词器,将分出来的词放在索引库(这样用户可以通过某个词汇找到某个document:倒排索引),并且每个索引都存有指向document的指针,因此索引文件还具有document域。
用户输入的语句,先经过分词解析器,分成一小段索引,然后去索引域中找,找出相应的document。
lucene只是个全文检索工具包,是个jar包,不能独立运行,不能对外提供服务。
solr是个全文检索服务器,可以运行在web容器,可以单独对外提供服务。且比lucene更方便快捷.
其中,这个example中有例子目录,这些是可以用来做模板的。
开发时在dist目录中,找到solr的war包,这个可以直接放到tomcat上。
解压war包后,还需要导入solr的服务扩展包到WEB-INF的lib目录下。(在example中lib里)
第五步:添加log4j.properties,复制到该目录下
第六步:在web.xml中指定solrhome的目录
Solrhome是solr服务运行的主目录,一个solrhome目录里面包含多个solrcore目录,一个solrcore目录里面了一个solr实例运行时所需要的配置文件和数据文件。
每一个solrcore都可以单独对外提供搜索和索引服务。
多个solrcore之间没有关系。
复制到一个新的solrhome就OK了。
注意,还需要把复制这个两个文件夹(里面有jar包)复制到和solrhome同级目录下。
这两个文件对solrcore有影响,在solrcore中的solrconfig配置文件中需要改动
改动如下:solr.install.dir 表示solrcore的安装目录。所以需要改成返回上级两次目录(原本是三次)
这些lib标签就是用来导入包的。
solrconfig还有两个标签需要知道:
OK,介绍完启动。
界面如下:
上面只配了一个collectin1,可以配多个,复制就好了,但是需要改变名字,修改solrcore目录下的core.properties
这样就配置了多个solrcore.
大概就这么多。
在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先定义后使用。
定义Field域
Name:指定域的名称
Type:指定域的类型
Indexed:是否索引
Stored:是否存储
Required:是否必须
multiValued:是否多值,比如商品信息中,一个商品有多张图片,一个Field像存储多个值的话,必须将multiValued设置为true。
动态域
Name:指定动态域的命名规则
指定唯一键
其中的id是在Field标签中已经定义好的域名,而且该域要设置为required为true。
一个schema.xml文件中必须有且仅有一个唯一键
复制域
Source:要复制的源域的域名
Dest:目标域的域名
由dest指的的目标域,必须设置multiValued为true。
为什么要copyFiled呢?有些时候需要查询多个域,如果我们合在一起了,一起就可以查出来.
定义域的类型
|
Name:指定域类型的名称
Class:指定该域类型对应的solr的类型
Analyzer:指定分析器
Type:index、query,分别指定搜索和索引时的分析器
Tokenizer:指定分词器
Filter:指定过滤器
使用ikanalyzer进行中文分词
第一步:将ikanalyzer的jar包拷贝到以下目录
第二步:将ikanalyzer的扩展词库的配置文件拷贝到 目录
第三步:配置FieldType
第四步:配置使用中文分词的Field
之后重启,就可以使用我们新添加的field进行中文分词了(在哪analysis中有选择)
把需要的数据库中需要建立索引分词的表建立fied就行。
比如:product表
这里因为一个一个schema.xml文件中必须有且仅有一个唯一键,这个schema.xml本身就有有个id键,这里不需要添加。
(那怎么没看到id和pid的映射?后面可以知道,现在这里不用配)
还记得前面说的Dataimport,用来导入数据到solr中。
一:导入Dataimport的jar包
修改solrconfig.xml文件,添加lib标签
将mysql的驱动包,复制到以下目录(db需要自己建)
修改solrconfig.xml文件,添加lib标签
二:配置requestHandler
在solrconfig.xml中,添加一个dataimport的requestHandler
第三步:创建data-config.xml
在solrconfig.xml同级目录下,创建data-config.xml(这个里面,就可以让pid对应上面的id了。
这个sql语句可以自己随便写,但是必须是自己需要的数据)
重启后:Dataimport就有用了,这个拦截路径正好是我们配的那个.
Solrj就是solr服务器的java客户端。