Solr介绍

Solr/Lucene采用的是一种反向索引,所谓反向索引:就是从关键字到文档的映射过程,保存这种映射这种信息的索引称为反向索引。
Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。
Solr是一个基于Lucene的全文搜索引擎,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,实现了可配置、可扩展并对查询性能进行了优化,更灵活的配置,更高的查询效率。支持 XML/HTTP协议 ;支持 JSON API 接口;支持缓存、复制;同时具有完善的Web管理界面,是一款非常优秀的全文搜索引擎。

  Solr对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML/JSON文件,生成索引;也可以通过Http Get操作执行查询请求,并以XML/JSON格式的返回结果。


Solr的特性包括:
1.强大的全文搜索功能。
2.专为高通量的网络流量进行的优化。
3.基于开放接口(XML和HTTP)的标准。4.综合的HTML管理界面。
5.可伸缩性-能够有效地复制到另外一个Solr搜索服务器。
6.使用XML配置达到灵活性和适配性。
7.可扩展的插件体系。
8.高亮功能;
9. 数据库整合;
10. 高可靠性、伸缩性和容错能力。提供分布式索引,复制,和负载平衡的查询。自动故障转移和恢复,易于配置等;

Solr的使用步骤:
1>Solr的安装:
服务器需要提前配置好JAVA运行环境.
2>下载solr
3>解压缩
 tar -xvf solr-5.5.4.tgz -C /usr/local
4>启动
cd /usr/local/solr/bin
./solr  start   //启动
5>访问控制台
Jetty服务的默认服务端口是8983,此刻访问你的 http://IP:8983 ,你应该可以看到Solr的控制面板了。

访问 8983端口 连接失败,原因可能有两个:
1. Jetty 服务(Solr 服务)没有启动,启动即可,可以通过命令查看Solr的当前状态
2. 防火墙程序的拦截,把防火墙关闭 Cetos7 systemctl stop firewalld
Centos6:   service iptables stop

solr配置:
1>准备创建core的配置文件
coresolr的特有概念,每个core是一个查询数据,索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core
1、在/usr/local/solr/server/solr
子目录下面建立一个新文件夹,命名为collection1,这个是core的名称:
mkdir  /usr/local/solr/server/solr/collection1
 
2、把/usr/local/solr/server/solr/configsets/data_driven_schema_configs/conf下面的所有文件全部拷贝到我们创建的conf目录中
cp -R /usr/local/solr/server/solr/configsets/data_driven_schema_configs/conf  /usr/local/solr/server/solr/collection1/conf
 
3、 把目录/usr/local/solr/example/example-DIH/solr/db/conf 下面的admin-extra.html admin-extra.menu-bottom.html admin-extra.menu-top.html 三个html文件复制到目录/usr/local/solr/server/solr/collection1/conf
 
 cp -r /usr/local/solr/example/example-DIH/solr/db/conf/admin*.html /usr/local/solr/server/solr/collection1/conf
 
4、修改/usr/local/solr/server/solr/collection1/conf 目录下的solrconfig.xml
增加内容如下:
<requestHandler name="/dataimport" class="solr.DataImportHandler">  
   <lst name="defaults">  
     <str name="config">data-config.xml</str>  
   </lst>  
 </requestHandler>  
requestHandler请求处理器,定义了索引和搜索的访问方式。
通过/dataimport进行数据导入,可以完成从MYSQL数据库导入数据到Solr的操作。
data-config.xml文件是自己制定的数据源描述文件,名字可以随便取。
6、/usr/local/solr/server/solr/collection1/conf 目录下新建data-config.xml
7、修改/usr/local/solr/server/solr/collection1/conf 目录下managed-schema文件中添加如下内容:
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
   <field name="product_price"  type="float" indexed="true" stored="true"/>   
   <field name="product_picture" type="string" indexed="false" stored="true" />
   <field name="product_catalog_name" type="string" indexed="true" stored="true" />   
   <field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
   <copyField source="product_name" dest="product_keywords"/>  
field配置参数说明:
l  Name:域的名称
l  Type:域的类型
l  Indexed:是否索引
l  Stored:是否存储  
l  multiValued:是否是多值,存储多个值时设置为truesolr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图)
copyField(复制域):
可以将多个Field复制到一个Field中,以便进行统一的检索。当创建索引时,solr服务器会自动的将源域的内容复制到目标域中。
l  source:源域
l  dest:目标域,搜索时,指定目标域为默认搜索域,可以提供查询效率。

第二步:安装中文分词
因为solr虽然内置中文分词,但效果并不好,我们需要添加IKAnalyzer中文分词引擎来查询中文。在https://github.com/EugenePig/ik-analyzer-solr5
下载IKAnalyzer for solr5的源码包,然后使用Maven编译,得到一个文件IKAnalyzer-5.0.jar,把它放入/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中,然后在managed-schema的最后加入以下内容:
<fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
        <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
    </fieldType>
保存后,core的配置就算完成了。
上传相关类库:
要导入mysql数据,需要MYSQL类库:
mysql-connector-java-bin.jar库文件,
连同solr/dist目录下面的
solr-dataimporthandler-5.5.0.jar
solr-dataimporthandler-extras-5.5.0.jar两个文件,全部拷贝到/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中,然后重启solr,就可以开始数据导入工作了。
 
重启Solr   ./solr restart
第三步:创建Core
1、登录

点击Add Core ,没有错误,表示创建成功!

第四步:导入数据:
相应的数据库脚本:0512_products.sql,先把MYsql数据库准备好

 q - 查询关键字,必须的,如果查询所有使用*:*
 fq- filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的
比如:过滤查询价格从120的记录。也可以在“q”查询条件中使用product_price:[1 TO 20]
也可以使用*”表示无限,例如:
20以上:product_price:[20 TO *]
20以下:product_price:[* TO 20]
sort - 排序,格式:sort=<fieldname>+<desc|asc>[,<field name>+<desc|asc>]… 。
示例:product_price desc    按照价格从高到低进行排序
product_price asc    按照价格从低到高进行排序
fl - 指定返回那些字段内容,用逗号或空格分隔多个,不写默认返回全部配置的。
df-指定一个默认搜索Field ,如果q查询关键字未指定搜索字段,就用默认搜索字段
wt - (writer type)指定输出格式,可以有xml, json, csv, python, php等格式
hl 是否高亮 ,设置高亮Field,设置格式前缀和后缀。

准备相关JARMAVEN依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>5.5.4</version>
</dependency>

编写JAVA调用创建文档程序
/**
 * 增加文档
 *
 * @throws Exception
 */
 
public static void create() throws Exception {
String URL = "http://192.168.1.116:8983/solr/collection1";
HttpSolrClient server = new HttpSolrClient(URL);
// 创建数据
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "5001");
doc.addField("product_catalog_name", "幽默杂货");
doc.addField("product_price", "28.8");
doc.addField("product_name", "幸福一家人彩色金属门后挂");
doc.addField("product_picture", "2014032612461139.png");
server.add(doc);
server.commit();
}
 
 
3、编写JAVA调用检索文档程序
/**
 * 检索文档
 *
 * @throws Exception
 */
 
public static void query() throws Exception {
String URL = "http://192.168.1.116:8983/solr/collection1";
HttpSolrClient server = new HttpSolrClient(URL);
 
// 定义查询内容 (列名:关键字)
SolrQuery query = new SolrQuery("product_name:幸福"); // 定义查询内容
query.setStart(0);// 起始游标位置
query.setRows(10);// 返回的结果集数量
QueryResponse rsp = server.query(query);
SolrDocumentList results = rsp.getResults();
System.out.println(results.getNumFound());// 查询总条数
for (SolrDocument doc : results) {
System.out.println(doc);
}
}

 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序。


1、配置springmvc.xml
关键配置和Solr核心调用地址:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
 
<!-- 配置扫描 器 -->
<context:component-scan base-package="com.offcn"/>
<!-- 配置处理器映射器  适配器 -->
<mvc:annotation-driven/>
<!-- 配置视图解释器 jsp -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 初始化sorl Server对象 -->
<bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
<constructor-arg index="0" value="http://10.0.0.234:8983/solr/collection1"/>
</bean>
</beans>

1、配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>jdsearch</display-name>
  <welcome-file-list>
    <welcome-file>list.action</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- POST提交过滤器 UTF-8 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
 
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>

阅读更多
文章标签: Solr
上一篇SQL语句总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭