Solr概述
- 所有编程语言都能调用使用Solr。
- Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企业级的,快速的和高度可扩展的。 使用Solr构建的应用程序非常复杂,可提供高性能。
- Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术。
- Solr是一个可扩展的,可部署,搜索/存储引擎,优化搜索大量以文本为中心的数据。
Solr的安装
-
在本地安装 tomcat
-
解压 solr,把 solr 下的dist目录solr-4.10.3.war部署到 Tomcat\webapps下(去掉版本号)
-
启动 Tomcat解压缩 war 包
-
把本地solr下example/lib/ext 目录下的所有的 jar 包,添加到tomcat的 solr 的工程中(\WEB-INF\lib目录下)
-
创建一个 solrhome 。本地solr 下的/example/solr 目录就是一个 solrhome。复制此目录到D盘改名为 solrhome
-
关联 solr 及 solrhome。需要修改tomcat的 solr 工程的 web.xml 文件,关联本地的 solrhome
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>F:\solrhome</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
-
重新启动 Tomcat,访问 : http:/localhost:8080/solr/
中文分析器 IK Analyzer
概述:
IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。
IK Analyzer 的配置:
-
解压 IK Analyzer 2012FF_hf1.zip压缩包
-
把 IKAnalyzer2012FF_u1.jar 添加到 tomcat的 solr 工程的 lib 目录下(\WEB-INF\lib目录下)
-
在solr的工程下,WEB-INF下创建classes文件夹 。把IK压缩包中的扩展词典、停用词词典、配置文件放到 solr 工程的 WEB-INF/classes 目录下
-
修改本地的 solrhome 的 schema.xml 文件(solrhome\collection1\conf),任意位置 配置一个 FieldType,使用 IKAnalyzer
<!--IKAnalyzer中文分析器--> <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
Slor域
域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的Field(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作。
域中的属性:
- name:指定域的名称
- type:指定域的类型 —(long、double、string、自定义类型(text_ik))
- indexed:是否索引 — 搜索(true 、false)
- stored:是否存储 — 展示(true、false)
- required:是否必须(不为null)— (true、false)
- multiValued:是否多值 — [“sadsa”,”dadasd”] (true、false)
1、配置所需的基本字段域
可以修改本地solrhome的 collection1\conf\schema.xml 文件 , 设置业务系统所需的 Field 。比如电商里面所需的搜索域对象(价格、商家、品牌…)
<!--配置基本业务所需的域-->
<field name="item_goodsid" type="long" indexed="true" stored="true"/>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="double" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category" type="string" indexed="true" stored="true" />
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<field name="item_brand" type="string" indexed="true" stored="true" />
2、配置复制域
复制域的作用在于将某一个Field中的数据复制到另一个域中。比如(在搜索的时候,不知道搜索的对象具体是什么,所以需要配置复制域来满足需求,)
在本地solrhome的collection1\conf\schema.xml文件配置
<!--配置复制域,里面包含所需的基本域-->
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/>
3、配置动态域
当我们需要动态扩充字段时,就需要使用动态域。比如: 电商里面的商品规格是不确定的,需要根据具体的分类来确定具体的规格
在本地solrhome的collection1\conf\schema.xml文件配置
<!--配置动态域-->
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />