欢迎投稿

今日深度:

Solr介绍,

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>下载solrhttp://archive.apache.org/dist/lucene/solr/5.5.4/solr-5.5.4.tgz3>解压缩 tar -xvf solr-5.5.4.tgz -C /usr/local4>启动cd /usr/local/solr/bin./solr  start   //启动5>访问控制台Jetty服务的默认服务端口是8983,此刻访问你的 http://IP:8983 ,你应该可以看到Solr的控制面板了。
访问 8983端口 连接失败,原因可能有两个:1. Jetty 服务(Solr 服务)没有启动,启动即可,可以通过命令查看Solr的当前状态2. 防火墙程序的拦截,把防火墙关闭 Cetos7 systemctl stop firewalldCentos6:   service iptables stop
solr配置:1>准备创建core的配置文件coresolr的特有概念,每个core是一个查询数据,索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core1、在/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.xml7、修改/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.jarsolr-dataimporthandler-extras-5.5.0.jar两个文件,全部拷贝到/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中,然后重启solr,就可以开始数据导入工作了。 重启Solr   ./solr restart第三步:创建Core1、登录
点击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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsdhttp://www.springframework.org/schema/txhttp://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>

www.htsjk.Com true http://www.htsjk.com/solr/36903.html NewsArticle Solr介绍, Solr/Lucene采用的是一种反向索引,所谓反向索引:就是从关键字到文档的映射过程,保存这种映射这种信息的索引称为反向索引。 Lucene是一个基于Java的全文信息检索工具包,...
相关文章
    暂无相关文章
评论暂时关闭