参考:
http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
https://cloud.tencent.com/developer/article/1583402
https://zhuanlan.zhihu.com/p/54384152
https://kalasearch.cn/blog/chapter2-run-elastic-search-locally/
https://www.elastic.co/cn/elasticsearch/
https://www.jianshu.com/p/d48c32423789
写这篇文章之前,我对ES的印象仅限于它能像数据库一样进行增删改查!
-
ElasticSearch是什么?
看这里: https://cloud.tencent.com/developer/article/1583402
Elasticsearch 是一个实时的分布式存储、搜索、分析的引擎。
相对于数据库,Elasticsearch的强大之处就是可以模糊查询。 -
ElasticSearch基本概念
参考: https://www.jianshu.com/p/d48c32423789
https://blog.csdn.net/CrankZ/article/details/80615789
2.1 全文搜索(Full-text Search)
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,
当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
在全文搜索的世界中,存在着几个庞大的帝国,也就是主流工具,主要有:
Apache Lucene,Elasticsearch,Solr,Ferret2.2 节点 & 集群(Node & Cluster)
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)2.3 正排索引(forward index) 和 倒排索引(Inverted Index)
正排索引(forward index):
正排索引是从文档角度来找其中的单词,表示每个文档(用文档ID标识)都含有哪些单词,
以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。所以每次搜索都是遍历所有文章。
倒排索引(Inverted Index)
倒排索引是从单词角度找文档,标识每个单词分别在那些文档中出现(文档ID),
以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。
简单记为:
正排索引:文档 —> 单词
倒排索引:单词 —> 文档2.3 索引(Index)
Elasticsearch 数据管理的顶层单位就叫做 Index(索引),相当于关系型数据库里的数据库的概念。另外,每个Index的名字必须是小写。2.4 文档(Document)
Index里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。
同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
Document 使用 JSON 格式表示的例子是:{ "user": "张三", "title": "工程师", "desc": "数据库管理" }
2.5 类型(Type)
Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。
这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。
这是与关系型数据库的表的一个区别。性质完全不同的数据(比如products和logs)应该存成两个 Index
,而不是一个 Index 里面的两个 Type(虽然可以做到)。和mysql类比就是(可以简单的理解 但差别也是挺大的)
索引Index:相当于数据库(db)
类型 Type: 相当于表(table)
文档 Document:相当于行(row)
如果我们要访问一个文档元数据应该包括囊括 index/type/id 这三种类型2.6 分词器
参考: https://www.cnblogs.com/haixiang/p/11810799.html
安装: 首先我们访问 https://github.com/medcl/elasticsearch-analysis-ik/releases 下载与es对应版本的中文分词器。将解压后的后的文件夹放入es根目录下的plugins目录下,重启es即可使用。
3 kibana的使用
kibana.yml的 elasticsearch.hosts, elasticsearch.username, elasticsearch.password 填入对应的信息(同一台机器上localhost要写成elasticsearch)
参考: https://www.cnblogs.com/chenqionghe/p/12503181.html
通过 DevTools, 我们可以非常方便的操作 ES 的 API, 如查询集群节点信息、查询索引数据信息等,如下所示:
使用Kibana操作es的api https://blog.csdn.net/Fzqx_/article/details/88576361
查询 所有索引: GET _cat/indices?v
查询索引的所有内容: GET employee_info/_search
按照id 查询: GET index名/_doc/{_id}
删除索引 DELETE index名