索引库相关操作
Overview
索引库的总览,显示集合的信息和分片信息
Analysis
分析器:这个功能可以用来调试字段的分词效果
左边部分是针对索引解析器的处理过程,右边部分是针对查询解析器的处理过程,我们来做一下测试,选择底部的字段或者字段类型,这里我们选择content字段,输入“I love you”,然后点击Analyse Values按钮,让我们来看一下索引解析器和查询解析器的处理结果
从图中可以看出,左侧索引使用到的解析器如下:
- ST解析器(StandardTokenizer)- 标准解析器
- SF解析器(StopFilter) - 停用词解析器
- LCF解析器(LowerCaseFilter) - 小写转换解析器
右侧查询使用到的解析器如下:
- ST解析器(StandardTokenizer)- 标准解析器
- SF解析器(StopFilter) - 停用词解析器
- SGF解析器(SynonymGraphFilter) - 同义词解析器
- LCF解析器(LowerCaseFilter) - 小写转换解析器
我们可以通过managed-schema的配置文件来查看下content字段的配置吧,来增进我们的理解,我们从solr管理控制台的Files菜单也可以查看managed-schema文件的内容
<field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>
我们可以看到content字段的字段类型是text_general字段类型,我们再来看看字段类型text_general的配置内容
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.FlattenGraphFilterFactory"/> -->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
从配置文件可以看出,text_general字段类型的解析器有两个,一个是index(索引数据时使用的解析器),一个是query(查询数据时使用的解析器)
Dataimport
数据导入:可以将其他数据源的数据导入到Solr中,8.6版本后官方就不建议使用这种方式了
有的人安装完Solr后点击这个菜单不一定会出来这个界面或者有显示这个界面,但是功能确不能正常使用,那是因为要能正确运行该功能,需要在配置文件中进行配置修改,配置文件是solrconfig.xml,打开后可以找到如下这段配置内容
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">solr-data-config.xml</str>
</lst>
</requestHandler>
从配置内容可以看到dataimport处理器还引用了solr-data-config.xml文件,我们打开solr-data-config.xml文件,如果这个文件不存在,可自行创建,切记,不要在该配置文件中添加<?xml version="1.0" encoding="UTF-8" ?>笔者当时添加了反而报错,找了好久才发现问题所在
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrdb?characterEncoding=utf8" user="root" password="root"/>
<document>
<entity name="book" query="select id,name,author,description from books"></entity>
</document>
</dataConfig>
配置完后,在Solr管理控制台,点击dataimport菜单
选择完数据源后点击Execute按钮,等待数据导入完成,当然导入的数据如果字段不存在的话,需要实现在manage-schema配置文件中进行配置并重启Solr才能导入
Documents
索引文档的相关操作,一般新增、修改、删除索引文档数据都在这个菜单完成
我们可以看到请求处理器是/update
对应的配置文件,可以到solrconfig.xml文件中进行查看,可以看到update对应的处理部分配置如下:
<updateHandler class="solr.DirectUpdateHandler2">
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
</autoSoftCommit>
</updateHandler>
- 添加文档:以json串举例,这里要注意,json的key需要在managed-schema配置文件中有定义,否则将无法保存成功
{
"id": 1,
"name": "这是名称",
"title": "这是测试文档"
}
2.修改文档:Solr的修改文档底层是先删除再新增,所以修改文档的话,需要把原文档的所有字段都需要录入
{
"id": 1,
"name": "这是名称11111",
"title": "这是测试文档11111",
"content": "测试内容"
}
3.删除文档:删除文档只能以xml的方式来执行,格式如下:
<delete>
<query>*:*</query>
</delete>
Files
查看当前Collection的相关配置文件
Query
查询解析器:Solr管理控制台提供的查询索引数据的工具,这里暂时先介绍常用的几个参数,后续有机会再补充其他的参数说明
下面对各个参数进行下解释
q:查询条件,常用的列举如下
查询所属有文档: :
查询id为1的文档:id:1
查询id大于等于1小于等于10的文档:id:[1 TO 10]
查询主文档,当然,需要在主文档中所有的索引数据添加isParent_b字段,否则查询无效:{!child of=": -isParent_b:true"}
查询子文档:{!child of=": -isParent_b:false"}
fq:查询过滤(Filter query),在q参数查询条件情况下进一步过滤,类似sql的子查询
sort:字段排序
start,rows:分页获取数据时用到,start:从第几条记录开始,rows:从starts位置获取几条数据
fl:字段列表,获取查询的结果集字段列表
df:默认查询字段
hl:高亮查询使用
facet:查询统计使用
Schema
除了动态配置字段外,还可以通过菜单Schema来实现字段的动态配置
点击下拉列表,可以选择现有的字段列表,这里我们选择C_Subject_s字段,右边显示该字段的相关属性,显示如下:
Indexed:这个字段可被索引
Stored:这个字段会被存储到索引文档数据
MultiValues:这个字段是否可以存储多个值
其他几个属性目前还未知,等后续了解清楚后再补充
1.Add Field:添加普通字段,界面显示如下:
name:输入字段名称
field type:字段类型选择
default:默认值
勾选项说明:
stored:这个字段是否能被存储
indexed:这个字段是否能被索引
multiValued:这个字段是否能存储多值
required:这个字段是否是每个文档必须要保存的字段
2.Add Dynamic Field:添加动态字段,界面如下:
动态字段类似添加字段
3.Add Copy Field:添加拷贝字段,拷贝字段主要是将索引文档的多个字段映射到该字段,后续可通过查询该字段实现多个字段的查询功能,配置界面如下: