Solr

Solr

​ 是一个开源的搜索引擎工具,分布式搜索。说到分布式搜索几个字已经能大致了解他的优势和特点。在此要感谢公司的技术交流氛围,让我了解了不少新技术,但要是一直遇不到场景,难免会忘记,所以现在记录下来。

​ 初印象是Solr的速度非常之快,他的原理大致为可以把关系型数据库的数据搬出来,基于数据的索引可进行增删改查(也是为什么它很快的一个原因),支持用户自定义的分词器,教程里写可以与Hadoop一起使用,但好吧我还不了解Hadoop…

​ 上面说他把数据库的数据搬出来,Solr不仅支持查询,其实也是一个变相的数据库,没错他应该是算作NoSQL的,它是支持存储,可扩展的,处理大量数据的搜索引擎。

​ 官方的教程已经非常详细,这边也不做多余的操作步骤,大概讲个流程。推荐教程,W3C易百

​ 导入数据需要在xml里配置数据库信息,开启Solr服务后有个可视化的仪表盘,可以看到Solr的占存、分片情况等,可以在查询面板里执行查询操作,有一些参数

参数 描述
q 这是Apache Solr的主要查询参数,文档根据它们与此参数中的术语的相似性来评分。
fq 这个参数表示Apache Solr的过滤器查询,将结果集限制为与此过滤器匹配的文档。查询结果被限制为仅搜索筛选器查询返回的结果。
start start参数表示页面的起始偏移量,此参数的默认值为0
rows 这个参数表示每页要检索的文档的数量。此参数的默认值为10
sort 这个参数指定由逗号分隔的字段列表,根据该列表对查询的结果进行排序。
fl 这个参数为结果集中的每个文档指定返回的字段列表。
wt 这个参数表示要查看响应结果的写入程序的类型。

​ Solr索引(Document),它类似与关系型数据库表中的一条记录,可以包含多个字段(Field),每个字段包含name和value,通常文档都包含一个能唯一表示该数据的id字段,例如:

1
2
3
4
5
6
7
8
<doc>
<field name="id">company123</field>
<field name="companycity">Atlanta</field>
<field name="companystate">Georgia</field>
<field name="companyname">Code Monkeys R Us, LLC</field>
<field name="companydescription">we write lots of code</field>
<field name="lastmodified">2013-06-01T15:26:37Z</field>
</doc>

Field座位构成Document的基本单元,除了name和value还有一些其他属性

1
<field name="name" type="text_general" indexed="true" stored="true"/>
  • Indexed:Indexed=true时,表示字段会加被Sorl处理加入到索引中,只有被索引的字段才能被搜索到。
  • Stored:Stored=true,字段值会以保存一份原始内容在在索引中,可以被搜索组件组件返回,考虑到性能问题,对于长文本就不适合存储在索引中。

核心(core),封装单个物理索引。一个或多个组成集合的逻辑碎片(或片)。当数据量大的时候,需要分布式的solr,这时拆分后的数据就存放在一个个core中,一个collection下可以有一个或多个core,而core可以看做一个容器,是数据碎片所在的地方,但是担心一台机器里出故障,所以碎片有重复的。