ES 测试分词

es中的分词器由三部分组成

1、character filter:作用:先对要进行分析的文本进行一下过滤,比如html文档,去除其中的标签,比如<p>、<html>等等;

2、tokenizer:作用:对文本进行分词,把要进行分析的文本根据所指定的规则,按照其规则把文本拆分为单词,,只可以指定一个;

3、tokenizer filter:作用:把分好的词条(也即将tokenizer分好的词)进一步进行过滤,根据指定的filter把其识别的没用的词条给删除,或者增加(比如增加某些词的同义词)、修改(比如将testing、tested这种词同意为test)词条,可以指定多个。

[分词使用场景]:

创建或者更新文档时候,会对相应的文档进行分词处理
查询时,会对查询语句进行分词
注意,index时所用的分词器和查询时所用的分词器可不一样,可通过"analyzer"指定index时分词器,通过"search_analyzer"指定查询时分词器,但建议是设置成一样的,不然不利于查询(”put test_index{"mappings":{"doc":{"properties":{"title":{"type":"text","analyzer":"whitespace","search_analyzer":"standard"}}}}})

es提供有测试分词的接口,endpoint是_analyze,

如下三种方式:

 

1)可以直接指定analyzer进行测试

post _analyze


{
"analyzer":"stardard", #指定的分词器
"text":"hello world" #要进行分析的文本
}


2)可以直接指定索引中的字段进行测试

post index_name/_analyze


{
"field":"firtname", #要进行分析的索引中的字段
"text":"ni cai" #要进行分析的文本
}


3)可以自定义分词器进行测试

post _analyze
 
{
"tokenizer":"standard", #指定的分词器
"filter":["lowercase"],  #对分析后的词最后进行小写转换
"text":"hello world" #要进行分析的文本
}


自定义分词:

character filter的测试:

post _analyze
 
{
"tokenizer":"keyword",#指定的分词器,keyword分词不对要进行分析的文本划分为多个词条
"char_filter":["html_strip"], #指定的字符过滤器,这个html_strip过滤器会把文本中的html相关标签给去掉
"text":"<p>I&apos;m so <b>happy</b>!</p> #要进行分析的文本
}

 

tokenizer的测试:

post _analyze
 
{
"tokenizer":"path_hierarchy", #指定的规则
"text":"/one/two/three" #要进行分析的文本 
}

 

自定义分词需要在索引的配置中设定,如下:
使用上述自定义的分词进行验证如下:

POST test_index/_analyze


{
"analyzer":"my_custom_alanyzer",
"text":"Is this <b>a box</b>?"
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值