注:日常学习记录贴,下面描述的有误解的话请指出,大家一同学习。
elasticsearch作为一个全文搜索器,很多人喜欢拿去和solr对比,因为我之前在工作使用了elasticsearch,一直没有好好的整理,我这边的帖子只做elasticsearch的整理,有机会我会整理下solr的。
由于es涉及到的知识很多,比如涉及到怎么创建索引,或者类型,或者全文搜索,
我这里就不一一探讨了,很多基本知识大家可以自行的去翻翻开发手册。
下面我推荐了几个网站,方便大家学习:
1.https://elasticsearch.cn/explore/category-2 (es中文社区)
2.https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html (es 开发手册)
3.https://www.jianshu.com/p/ed7e1ebb2fb7 (es 索引相关博客)
一、es介绍
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎.
Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎. 当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
1.分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
2.实时分析的分布式搜索引擎。
3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
二、Elasticsearch优缺点
优点
1、Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
2、Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
3、处理多租户(multitenancy)不需要特殊配置。
4、Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
5、各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点
1、还不够自动,不适合当前新的Index Warmup API (参考:http://zhaoyanblog.com/archives/764.html)
2、只支持json数据格式。
三、与数据库比较
es | 关系型数据库 |
index(索引) | Db(数据库) |
type(类型) | Table(表) |
document(文档) | Row(行数据) |
四、分词器
es内置有分词器,但是对中文支持不好,我在项目中使用的是IK分词器。
内置分词器
standard tokenizer | standard | |
edge ngram tokenizer | edgeNGram | |
keyword tokenizer | keyword | 不分词 |
letter analyzer | letter | 按单词分 |
lowercase analyzer | lowercase | letter tokenizer, lower case filter |
ngram analyzers | nGram | |
whitespace analyzer | whitespace | 以空格为分隔符拆分 |
pattern analyzer | pattern | 定义分隔符的正则表达式 |
uax email url analyzer | uax_url_email | 不拆分url和email |
path hierarchy analyzer | path_hierarchy | 处理类似/path/to/somthing 样式的字符串 |
IK分词器
Es整合ik不直接用ik官网的工具包,需要将ik工具包封装成es插件才行,这个已经有人封装好了可以在github上下载elasticsearch-analysis-ik
1:在github上下载ik插件源码
https://github.com/medcl/elasticsearch-analysis-ik
2:下载后解压缩在根目录下使用maven对其进行编译。
编译后把target/release目录下的elasticsearch-analysis-ik-1.3.0.zip上传到/usr/local/elasticsearch-1.4.4/plugins/analysis-ik目录下然后使用unzip解压。
把下载的ik插件中config目录下的文件拷贝到/usr/local/elasticsearch-1.4.4/config目录下,这些文件时ik的配置文件,custom是自定义词库文件。
3:修改elasticsearch.yml文件,把ik分词器设置为es的默认分词器
index.analysis.analyzer.default.type:ik
或者
我们在mapping也可以未每个字段配置单独的分词器。【可能有些字段不用分词,那么可用这种方式】
4:重启es,注意es中的每个节点都要进行上述配置。
自定义分词器
在实际操作中,发现
1:创建一个dic文件,编码格式必须为utf-8无BOM格式,每个词一行多个词需要换行。
2:将自定义的dic文件上传到/usr/local/elasticsearch-1.4.4/config/custom目录下
3:修改ik的配置文件/usr/local/elasticsearch-1.4.4/config/IKAnalyzer.cfg.xml,在其中指定自定义的dic文件。
4:重启es
五、es索引和数据库索引差异
es使用的是倒排索引。
数据库默认创建的索引为b-tree索引。
详情可以参考:https://www.jianshu.com/p/ed7e1ebb2fb7