Elasticsearch是一个基于Lucene,Lucene是开源的Java索引检索组件。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
Elasticsearch 运行在一个分布式的环境中,从设计之初就考虑到了这一点,目的只有一个,让您永远高枕无忧。我们的集群可以随着您的需求的增长而增长——只需再添加一个节点就行。
前面讲过Elasticsearch安装和基本使用方法,小伙伴们可以翻翻历史文章,或在
/article/31176
【Elasticsearch 安装与增删改查的使用】
这里查看。
ES内置分词器
Standard Analyzer - 默认分词器,按词切分,小写处理Simple Analyzer - 按照非字母切分(符号被过滤), 小写处理Stop Analyzer - 小写处理,停用词过滤(the,a,is)Whitespace Analyzer - 按照空格切分,不转小写Keyword Analyzer - 不分词,直接将输入当作输出Patter Analyzer - 正则表达式,默认\W+(非字符分割)Language - 提供了30多种常见语言的分词器Customer Analyzer 自定义分词器看概念太虚了!一定要动手实操才有用!我们可以用_analyze进行分析,会输出分词后的结果,举两个例子吧!其他的你也要自己课后动手试试哦!
#默认分词器 按词切分 小写处理
GET _analyze
{
"analyzer": "standard",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
#可以发现停用词被去掉了
GET _analyze
{
"analyzer": "stop",
"text": "2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
中文扩展分词器
苹果明明一个词,不想让它分为两个呀!中文分词在所有搜索引擎中都是一个很大的难点,中文的句子应该是切分成一个个的词,但是一句中文,在不同的上下文,其实是不同的理解,例如: 这个苹果,不大好吃/这个苹果,不大,好吃。
有一些比较不错的中文分词插件:IK、THULAC等。我们可以试试用IK进行中文分词。
#安装插件
/download/31278
在plugins目录下创建analysis-ik目录 解压zip包到当前目录 重启ES
#查看插件
bin/elasticsearch-plugin list
#查看安装的插件
GET http://localhost:9200/_cat/plugins?v
IK分词器:支持自定义词库、支持热更新分词字典
ik_max_word: 会将文本做最细粒度的拆分,比如会将“这个苹果不大好吃”拆分为"这个,苹果,不大好,不大,好吃"等,会穷尽各种可能的组合;ik_smart: 会做最粗粒度的拆分,比如会将“这个苹果不大好吃”拆分为"这个,苹果,不大,好吃"curl -X GET "localhost:9200/_analyze?pretty" -H Content-Type: application/json -d
{
"analyzer" : "ik_max_word",
"text" : "这个苹果不大好吃"
}
如何使用分词器
列举了很多的分词器,那么在实际中该如何使用呢?看看下面这个代码演示就懂啦!
# 创建索引时候指定某个字段的分词器
PUT iktest
{
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
# 插入一条文档
PUT iktest/_doc/1
{
"content":"这个苹果不大好吃"
}
# 测试分词效果
GET /iktest/_analyze
{
"field": "content",
"text": "这个苹果不大好吃"
}
--
知识分享,时代前行!~~ 时代Java还有更多好文章……请查看历史和官网。