See You Again

全文搜索服务Solr

再学习一个Apache的一个开源组件Solr,这个组件主要解决应用内的搜索问题,一般也是用在中大型的应用中。如果你之前用的是数据库,且某些字段存储了大段的文本,这时候你的搜索速度就非常慢,而solr进行了分词、建索引的方式,对索引进行搜索,可以大大提高速度。主要的需求场景:

具体原理可以研究下源码或者官方的文档,这里还是从安装使用给一个直观的入门。

官网直接下载最近的包,解压到一个目录,然后通过命令启动:

  1. ./bin/solr start

这时候它会默认起一个Web服务 http://localhost:8983/solr/#/:

主要展示出当前的运行状态、运行的环境参数、日志等等信息。既然是一个搜索服务,肯定要录一些数据搜索测试下了,这个管理后台就可以手工添加。不过先要了解Solr的几个概念:

现在有一批新闻(news)数据,假设它有两个属性,title和content,我们创建一个叫 news 的Collection(有点类似数据库表的概念):

  1. ./bin/solr create -c news

然后在管理后台选择 news—>Schema—>Add Field,添加 title、content两个Field,类型选择 text_en 就可以了。加完重启一下服务,在 Documents 里添加数据,它支持多种数据格式的导入CSV、File Upload、JSON、XML、Solr Command、Document Builder,这里我们导入几条JSON数据:

  1. {"title":"Apple drops its iconic startup chime from the new MacBook Pros", "content":"will turn themselves on and boot up when you open them. So while the power button still turns the machine off, there's no need to use it to turn it on"}

提交表单后,这条数据就录入进去了,在 Query 菜单里输入查询参数就可以查询了。它的数据录入、查询都是通过HTTP协议进行操作的,比较便捷。
Solr 有自己的一套查询语法,也有类似 SQL的语法,直接通过 HTTP 就可以得到查询结果了,列几个常用的查询参数:

这些参数的名称是固定的,具体可查阅官方的文档。另外它还支持类似模糊匹配、正则匹配的语法,可以极大的方便查询。下面是一个查询的请求示例:

  1. news curl 'http://localhost:8983/solr/news/select?wt=json&indent=true&q=apple'
  2. {
  3. "responseHeader":{
  4. "status":0,
  5. "QTime":86,
  6. "params":{
  7. "q":"apple",
  8. "indent":"true",
  9. "wt":"json"}},
  10. "response":{"numFound":1,"start":0,"docs":[
  11. {
  12. "title":"Apple TV's 'TV guide' app expected to appear tomorrow",
  13. "content":"It's not just new Macs.",
  14. "id":"ae618ab9-c578-4b8d-9b1a-74189a1d32c7",
  15. "_version_":1549417011112574976}]
  16. }}

如果涉及到中文的搜索,还需要加入一个中文分词组件库,这里就不多说了。这里算是对搜索领域有一个入门,特别对于应用内的搜索,可以把数据同步到 Solr 组件中,然后利用其提供的REST接口方便的进行数据检索了。

2016-10-31 喜欢

Copyright © 2015-2018 转载请注明出处

回到顶部 ↑