Solr 索引库
1 solr home目录结构
1.1 solr.xml 配置 solr 集群
1.2 collection1 (索引库:solr core )
1.3 core.properties 设置索引库的名称
1.4 data 存放索引
1.5 conf 索引库的配置目录
1.5.1 schema.xml: 配置字段以及字段类型
2 索引库配置
schema.xml 是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否分词,是否存储等等。
2.1 如何定义索引库中的 Field
<field>:定义域
<field name="_version_" type="long" indexed="true" stored="true"/>
- name:表示域的名称,是强制必须有的属性
- type:域类型的名称,与 fieldType 元素的 name 属性值对应,是强制必须有的属性
- indexed:是否参与检索。true 即表示需要对该域进行索引。默认值为
- stored:是否将 field 域中的内容存储到文档域,简单通俗的来说,就是你这一个field 需不需要被当作查询结果返回。
- required:表示这个域是否是必须要在 document 中存在,默认值为 false,如果此配置项设为 true,则你的 document 中必须要添加此域,否则你创建索引时会抛异常。
2.2 如何定义索引库中的 FieldType
<fieldType>:定义域的类型
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
- name:域类型的名称,作为域类型标识符存在,在定义域(Field)时使用的类型(FieldType)属性就是域类型的名称。
- class:域类型的数据类型,该属性指向的是 solr 中的已定义的类型,或者是用户定义的类型,域类型中的数据会被初始化成 class 执行类类的对象。
- sortMissingFirst/sortMissingLast:控制当排序域的值不存在时该文档(Document)所在队列的位置。true 是则在队头/队尾
2.3 如何定义索引库中的 CopyField
<copyField>: 复制域。可实现更新与查询分离
<copyField source="item_title" dest="item_keywords"/>
Source:源域
Dest:目标域
3 Solr 的索引机制
3.1 正排索引(正向索引)
正排索引是以文档的 ID 为关键字,索引文档中每个字的位置信息,查找时扫描索引中每个文档中字的信息直到找出所有包含查询关键字的文档。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。
尽管正排索引的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。
正排索引从文档编号找词
3.2 倒排索引(反向索引)
对数据进行分析,抽取出数据中的词条,以词条作为 key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。
当 solr 存储文档时,solr 会首先对文档数据进行分词,创建索引库和文档数据库。所谓的分词是指:将一段字符文本按照一定的规则分成若干个单词。
倒排索引是从词找文档编号