一、分词
分词是对字符串进行切分,将一个字段的字符串切分成多个term进行匹配,内容是“我是中国人”,会被切分成 我/是/中国人。
二、分词器
分词器实际就是对字符串切分逻辑,不同分词器切分逻辑不一样,比如使用ik_max_word分词器,内容是“我是中国人”,会被切分成 我/是/中国人。
三、分词器使用阶段
分析器主要有两种情况会被使用,第一种是插入文档时,将text类型的字段做分词然后插入倒排索引,为了后面方便说明,我们称之为写入分词。第二种就是在查询时,先对要查询的text类型的输入字符串做分词,再去倒排索引搜索,我们称之为查询分词,根据搜索的term和写入时被切分存储的term进行匹配。
四、分词器优先级和配置方式
1.qeury维度
查询语句query中配置的ananlyzer
GET /test_analyzer/_search
{
"query": {
"match": {
"content":{
"query":"中国人",
"analyzer": "standard"
}
}
}
}
2.字段维度
a)mappings中设置的查询分词(search_analyzer)
PUT /test_analyzer
{
"mappings": {
"properties": {
"content":{
"type": "text",
"search_analyzer": "ik_max_word"
}
}
}
}
b)mappings中设置的写入分词(analyzer)
PUT /test_analysis_mappings
{
"mappings": {
"properties": {
"content":{
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
3.索引维度
a)settings中设置的默认查询分词(default_search)
PUT /test_analysis_settings_testsss1
{
"settings": {
"analysis" : {
"analyzer":{
"default_search":{
"tokenizer":"ik_smart"
}
}
}
},
"mappings":{
"properties":{
"content":{
"type":"text"
}
}
}
}
b)settings中设置的默认写入分词(default)default analyzer
PUT /test_analysis_settings_testsss
{
"settings": {
"analysis" : {
"analyzer":{
"default":{
"tokenizer":"ik_max_word"
}
}
}
},
"mappings":{
"properties":{
"content":{
"type":"text"
}
}
}
}
4.集群维度
集群默认的分词器standard。
五、分词测试
1.测试分词器分词结果
GET _analyze
{
"analyzer":"ik_max_word",
"text":"湖北小白菜12kg一级"
}
2.测试索引的分词器分词结果
一般测试索引中定义的自定义分词器
GET /test_analysis_settings_test/_analyze
{
"analyzer": "standard",
"text": "我是中国人"
}
3.测试索引字段写入分词结果
GET /test_analysis_settings_testsss1/_analyze
{
"field": "content",
"text": "我是中国人"
}
4.测试索引字段查询分词结果
目前还没有测试接口。