内部集群原理理解
- Node结点,每一个ElasticSearch服务代表一个结点,往ES添加数据的时候需要用到索引–保存数据的相关地方。索引实际上是指向一个或多个物理分片的逻辑命名空间。一个分片是一个底层的工作单元。ElasticSearch是利用分片将数据分发到各个节点里,当你的集群规模扩大或缩小时,ElasticSearch会自动的在各个节点迁出分片,使得数据仍然均匀的分布在集群中,一个分片是一个lunence实例,它本身就是一个完整的搜索引擎。我们的文档被存储和索引到分片内,但是应用程序是直接与索引到分片内而不是与分片进行打交道的。
ES的底层是基于lucene搜索引擎来封装实现的,ES是基于索引来操作数据的,文档就是我们的数据,而ES里面最小的单位叫分片,每一个分片就是一个luence,他是存储数据的容器,每一个luence就是一个完整搜索引擎,每一个副分片是主分片的数据冗余备份,负责数据的备份和读数据的操作,副分片的数量可以在创建索引的时候就设置。
ES搜索vsMySQL搜索
- 了解概念 精确值vs全文。精确值很容易查询。要么匹配,要么不匹配,这种很容易用SQL表示。“where name = “John Smith” and user_id = 2 and date > “2021-09-15””查询全文数据不是这个文档的匹配查询,而是该文档匹配查询的程度有多大?为了促进这类在全文域中的查询,ElasticSearch首先分析文档,之后根据结果创建倒排索引。倒排索引适合全文搜索。先创建一个包含所有不重复词条的排序列表。
分析:首先将一个文本分成适合倒排索引的独立词条,之后将这些词条统一化为标准的格式以提高他们的可搜索性。分析器执行的工作实际上就是将上一句话说的三个功能封装到一个包里
字符过滤器:首先字符按顺序通过每个字符过滤器,他们的任务是在分词前整理字符串。一个字符串过滤器可以用来去掉html,或将&转换为and
分词器:字符串被分词器分成单个词条。如遇到,或空格就进行分词
Token过滤器:最后词条按顺序通过token过滤器,如小写话Quick,删掉a,an,the,或将jump和leap一视同仁等
先来了解什么叫精确搜索和全文搜索
精确搜索像sql“select name,gender from table where id = “1” and 。。。”这样。而全文搜索是要在数据中要到其中存在的某个词汇。
ES就适合全文搜索,它会在添加数据的时候就分析文档,创建倒排索引
ES分析文档的时候会将文档拆分成词条,创建词条列表
在添加数据的时候,ES会使用分析器分析:
- 分析过滤器:会去掉html格式的字符或去掉空格
- 分词器:会将文档的词条进行拆分,保存进排序列表中
- Token过滤器:会处理一些近义词或大小写的单词,将他们处理为一致的数据