悟纤:师傅,我发现我在解决问题时总是很慢,怎么办呢?
师傅:不要着急。首先你要明白,解决问题需要时间和耐心。你可以尝试将问题分解成更小的部分,然后一步一步地去解决。
悟纤:分解问题?能具体说说怎么做吗?
师傅:当然。比如说,你可以将一个大问题拆分成几个小问题,然后逐一解决。或者,你可以将问题按照紧急程度和重要性进行分类,优先解决重要的问题。
悟纤:这样确实有帮助。那么,还有其他方法可以提升我的问题解决速度吗?
师傅:当然。你可以通过练习来提高你的问题解决速度。你可以找一些类似的问题进行练习,这样可以帮助你更好地掌握解决问题的方法和技巧。
悟纤:我明白了,师傅。我会尝试这些方法的。
师傅:很好,徒儿。记住,解决问题的关键在于思考和行动。只要你不断地思考和尝试,你一定能够提高你的问题解决速度。
导读
Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。
分词器接受一个字符串作为输入,将 这个字符串拆分成独立的词或 语汇单元(token) (可能会丢弃一些标点符号等字符),然后输出一个 语汇单元流(token stream)
一、ES内置分词器
事实上,ElasticSearch中有一些内置分词器:
l Standard 分词器:默认分词器,会将词汇单元转成小写形式并且去除停用词和标点符号,支持中文采用的方法为单字切分。
l Simple 分词器:首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分词器会去除掉数字类型的字符。
l Whitespace 分词器:仅仅是去除空格,对字符没有lowcase化,不支持中文;并且不对生成的词汇单元进行其他标准化处理。
l Stop 分词器:相比Simple Analyzer多了去除请用词处理,停用词指语气助词等修饰性词语,如the, an, 的, 这等
l Keyword 分词器:不分词,直接将输入作为一个单词输出
l Pattern 分词器:通过正则表达式自定义分隔符,默认是\W+,即非字词的符号作为分隔符
l Language 分词器:特定语言的分词器,不支持中文。如 english 、french 和 spanish 分析器。
应该说,standard 分词器是大多数西方语言分词的一个合理的起点。 事实上,它构成了大多数特定语言分析器的基础,如 english 、french 和 spanish 分析器。 它也支持亚洲语言,只是有些缺陷(=.=To Be Honest , 你输入任何中文,都会被拆成一个一个的文字来分词,简直不要太糟糕),你可以考虑通过 ICU 插件的方式使用 icu_analyzer 进行中文分词更合理。
二、ICU 分析器插件
Elasticsearch的 ICU 分析器插件 使用 国际化组件 Unicode (ICU) 函数库提供丰富的处理 Unicode 工具。 这些包含对处理亚洲语言特别有用的 icu_分词器 ,还有大量对除英语外其他语言进行正确匹配和排序所必须的分词过滤器。
ICU 插件是处理英语之外语言的必需工具,非常推荐你安装并使用它,不幸的是,因为是基于额外的 ICU 函数库, 不同版本的ICU插件可能并不兼容之前的版本,当更新插件的时候,你需要重新索引你的数据(=。=根据你的ES版本替换后面的版本号,是6.8.1,则用6.8.1,你用7.3.0就用7.3.0,类推)。
2.1在线安装analysis-icu分词插件
安装命令如下:
#查看已安装插件
bin/elasticsearch-plugin list
#安装插件
bin/elasticsearch-plugin install analysis-icu
#删除插件
bin/elasticsearch-plugin remove analysis-icu
特别说明:这里要求是bin/这样的写法,不然插件无法安装到目录plugins下。
其它说明:安装和删除完插件后,需要重启ES服务才能生效。
使用kibana测试分词效果:
POST _analyze
{
"analyzer":"icu_analyzer",
"text":"中华人民共和国"
}
看右边的分词效果还不错。
2.2离线安装ik中文分词插件
本地下载elasticsearch-analysis-ik-x.x.x.zip插件,解压,
然后手动上传到elasticsearch的plugins目录,然后重启ES实例就可以了。
ik中文分词插件:
https://github.com/medcl/elasticsearch-analysis-ik
https://github.com/xiaoxinda/elasticsearch-analysis-ik/releases
#ES的默认分词设置是standard,会单字拆分
POST _analyze
{
"analyzer":"standard",
"text":"中华人民共和国"
}
#ik_smart:会做最粗粒度的拆
POST _analyze
{
"analyzer": "ik_smart",
"text": "中华人民共和国"
}
#ik_max_word:会将文本做最细粒度的拆分
POST _analyze
{
"analyzer":"ik_max_word",
"text":"中华人民共和国"
}
字段说明:
(1)token:分词
(2)start_offset:分词起始位置
(3)end_offset:分词结束位置
(4)type:
(5)position:记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)
特别说明:对于字段start_offset和end_offset主要用于高亮显示。
• 阿里巴巴前高级研发工程师
• 三家千万级互联网企业技术顾问
• MBTI/盖洛普技术专家
• 厦门某高校外聘教师
• 51CTO特约合作讲师
• 网易云课堂签约讲师
•《深入理解设计模式》作者