Apache Solr:全文搜索
Apache Solr 初探
Solr简介
Solr 是一个开源的全文搜索服务器,已经在众多大型的网站中使用,较为成熟和稳定。 Solr 使用 Java 语言开发,基于 Apache Lucene 实现,对Lucene进行了扩展,提供了比Lucene更为丰富的查询语言,同时提高了可配置、可扩展性,并对查询性能进行了优化,而且提供了一个完善的功能管理界面。Solr 可运行在Java的Servlet容器上,如Tomcat 、Jetty等。文档通过Http利用XML 加到一个搜索集合中。Solr查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,支持多种输出格式(包括 XML/XSLT 和 JSON 格式),通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。
Solr版本说明
Solr底层基于Lucene,而操作完全基于web方式Solr同时提供检索高亮标记,动态集群,数据库整合,多种文档支持的特性,因此是用来制作企业级全文检索的一个良好的选择。Solr完全采用Java编写,因此具有跨平台的能力,可以运行在Linux,Unix等多种支持Java的平台上。而Solr既可以作为独立应用部署在应用程序服务器上(例如Tomcat),也可以通过的REST和JSON api来与现有的应用进行整合,因此使用起来十分灵活方便。
Solr原理
Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。在Solr中,用户通过向部署在servlet 容器中的Solr Web应用程序发送HTTP 请求来启动索引和搜索,Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求,通过 HTTP 以同样的方式返回响应。默认配置返回Solr的标准 XML 响应,也可以配置Solr的备用响应格式。
安装Solr
Solr4.4要求Java运行环境(JRE)版本1.6或者更高。
方案一、命令窗口,进入根目录下执行 java -jar start.jar
方案二、Solr.war 放入Tomcat下启动运行(需要额外的一些配置和jar包),
参考:
http://blog.csdn.net/zhyh1986/article/details/9856115
http://www.aboutit.cn/blog/show/43
http://www.cnblogs.com/rainbowzc/p/3680029.html
中文分词
为什么使用中文分词?因为使用全文检索,中文分词是离不开的,目前Solr支持中文分词器分成两种:IKAnalyzer和mmseg4j,两种中文分词需要在solr中配置,具体的配置从略。
索引操作
可以向Solr索引servlet传递四个不同的索引请求:
add/update允许向Solr添加文档或更新文档。直到提交后才能搜索到这些添加和更新。
commit 告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到。
optimize 重构 Lucene 的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。
delete 可以通过 id 或查询来指定。按 id 删除将删除具有指定 id 的文档;按查询删除将删除查询返回的所有文档。
示例
启动solr
以jetty为例,执行如下之类:
user:~/solr/example$ java -jar start.jar
2012-06-06 15:25:59.815:INFO:oejs.Server:jetty-8.1.2.v20120308
2012-06-06 15:25:59.834:INFO:oejdp.ScanningAppProvider:Deployment monitor …/solr/example/webapps at interval 0
2012-06-06 15:25:59.839:INFO:oejd.DeploymentManager:Deployable added: …/solr/example/webapps/solr.war
…
Jun 6, 2012 3:26:03 PM org.apache.solr.core.SolrCore registerSearcher
INFO: [collection1] Registered new searcher Searcher@7527e2ee main{StandardDirectoryReader(segments_1:1)}
启动jetty,监听端口8983,访问solr管理页面:http://localhost:8983/solr/
索引数据
首次启动的solr没有包含任何可供搜素的数据,可以通过命令行添加/修改/删除/更新 索引数据,在exampledocs文件夹内附带了一些例子文件,可以通过脚本 post.sh进行数据添加,也可以通过java客户端post.jar进行
运行 java -jar post.jar -h 查看详细参数。
打开一个新的命令窗口,执行:
user:~/solr/example/exampledocs$ java -jar post.jar solr.xml monitor.xml
SimplePostTool: version 1.4
SimplePostTool: POSTing files to http://localhost:8983/solr/update..
SimplePostTool: POSTing file solr.xml
SimplePostTool: POSTing file monitor.xml
SimplePostTool: COMMITting Solr index changes..
这样就索引了两个文档并提交了改变,访问:http://localhost:8983/solr/collection1/select?q=solr&wt=xml,可以看到我们的搜索结果,格式xml,可以通过url中的参数修改
可以通过执行:java -jar post.jar *.xml 索引所有的例子文件.
搜索示例:
http://localhost:8983/solr/#/collection1/query?q=video
http://localhost:8983/solr/#/collection1/query?q=name:video
http://localhost:8983/solr/#/collection1/query?q=%2Bvideo%20%2Bprice%3A[*%20TO%20400]
向solr中导入数据的不同方式
Data Import Handler (DIH)
http://wiki.apache.org/solr/DataImportHandler
Load a CSV file
http://wiki.apache.org/solr/UpdateCSV
POST JSON documents
http://wiki.apache.org/solr/UpdateJSON
通过Solr Cell索引二进制文件如 Word、 PDF
http://wiki.apache.org/solr/ExtractingRequestHandler
使用SolrJ客户端建立和查询索引
http://wiki.apache.org/solr/Solrj
数据更新和删除也是类似地发送指令操作
定制数据查询
q=video&fl=name,id (return only name and id fields)
q=video&fl=name,id,score (return relevancy score as well)
q=video&fl=*,score (return all stored fields, as well as relevancy score)
q=video&sort=price desc&fl=name,id,price (add sort specification: sort by price descending)
q=video&wt=json (return response in JSON format)
通过http://localhost:8983/solr/#/collection1/query可以方便地测试定制的数据查询返回结果是否正确
排序
通过sort参数,可以方便地对一个或多个字段进行排序,举例:
q=video&sort=price desc
q=video&sort=price asc
q=video&sort=inStock asc, price desc
也可以使用一些复合函数,如:q=video&sort=div(popularity,add(price,1)) desc
如果没有指定排序规则,则默认:score desc
高亮显示
下面的例子对搜索结果中的name,features字段进行了高亮标注,高亮方式:对搜索到的结果中关键字添加了标签,如:This is the result for key xxxx.
http://localhost:8983/solr/collection1/select/?wt=json&indent=on&q=video+card&fl=name,id&hl=true&hl.fl=name,features
详细:http://wiki.apache.org/solr/HighlightingParameters
更多
solr还提供了很多高级功能,如分页、缩略显、自动完成、分类、统计分析、集群等。
如果大家想浏览我的下一篇文章,请留言
版权声明:此文章属于原创,不准随意转载:https://blog.csdn.net/LYQ2332826438