1.solr是什么?
solr是lucene搜索引擎的框架,lucene引擎是将无结构化的数据(磁盘中的文档等),通过创建document文档对象,产生索引,从而形成索引库,提供索引查询的一个引擎源码包。
Lucene的具体实现思路如下:
①源文件(可以是本地磁盘文件,也可以通过爬虫进行分析的数据)---->创建document对象,分析文档对象,形成索引,产生索引库
②用户通过查询索引--->得到返回结果
详细参照:http://blog.csdn.net/gsy_yang/article/details/59526558
那么,solr是Apache下面的一个项目,基于Lunce开发的一个搜索引擎服务器,可以运行在Jetty,tomcat等服务器上,现在来测试一下它是如何运行的。
①下载solr:Solr官方网站(http://lucene.apache.org/solr/ )
根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
在windows下,使用solr,将下载的压缩包解压,目录如下:
bin:solr的运行脚本
contrib:solr的一些贡献软件/插件,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。
docs:solr的API文档
example:solr工程的例子目录:
l example/solr:
该目录是一个包含了默认配置信息的Solr的Core目录。
l example/multicore:
该目录包含了在Solr的multicore中设置的多个Core目录。
l example/webapps:
该目录中包括一个solr.war,该war可作为solr的运行实例工程。
licenses:solr相关的一些许可信息
②运行环境:
使用Tomcat7,JDK1.7
③tomcat与solr整合:
a.将解压后的solr4.10.3文件夹打开,找到example/webapps:其中有solr.war压缩包,将其拷贝到tomcat的webapps下,在Tomcat
的bin中启动tomcat,将Tomcat的webapps文件夹下的.war压缩包删除。
b.把\solr-4.10.3\example\lib\ext目录下的所有的jar包添加到solr工程中,solr运行依赖这些jar,主要是一些日志jar,它们是:
c.把\solr-4.10.3\example\solr文件夹复制到一份到D:\路径下,改名为solrhome,改名不是必须的,是为了便于理解。solrhome表示存放多个solrcore实例的文件夹。
solrhome下有一个文件夹叫做collection1这就是一个solrcore,每个solrcore就相当于一个索引库。
d.在collection1文件夹中,有一个config的文件夹:
solrconfig.xml的配置信息:
Lib:solr服务依赖的扩展包,默认的路径是collection1\lib文件夹,如果没有 就创建一个
dataDir:配置了索引库的存放路径。默认路径是collection1\data文件夹,如果没有data文件夹,会自动创建。
requestHandler:
关于schema.xml与data-config.xml稍后介绍。
④配置solr服务器:
加载配置文件(solrhome)的位置,修改tomcat中webapps下的solr工程中的web.xml,启用jndi的方式配置加载solrhome中配置文件。
⑤启动Tomcat,访问http://localhost:8080/solr/即可看到:
选择collection1我们可以看到:
关于Query查询的页面使用说明如下:
接下来说一下配置中文分词器:schema.xml
第一步:把中文分析器添加到工程中。
1、把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下,也就是在Tomcat中运行的solr的WEB-INF/lib中。
2、创建classes目录,把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下。
3、进入solrhome/collection1/conf中,编辑schma.xml
①使用自定义FieldType
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> |
<field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/> <field name="item_price" type="long" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true" /> <field name="item_category_name" type="string" indexed="true" stored="true" /> <field name="item_desc" type="text_ik" indexed="true" stored="false" />
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_sell_point" dest="item_keywords"/> <copyField source="item_category_name" dest="item_keywords"/> <copyField source="item_desc" dest="item_keywords"/> |