ElasticSearch 基础学习
文章目录
基本概念
- index : 索引 一个索引中可以有多个type (建议一个index中只有一个type , 因为它的存储结构是将一个index的所有type的field整合成一个大的json , 当多个type的field 都不同时,那么一个docment的自己的field是有值的其他的docment的field都是null,这样会浪费很多存储空间,但是在elasticSearch7中将type给忽略了,也就是index下可以直接有docment,这样就不会出现feild为空而造成的存储空间浪费现象)
- type : 类型 一个type中可以有很多docment
- docment : 文档 es中最小数据存储单元
- field : 文档内的一个属性
- mapping : 映射 ?
- primary shard : 主分片存储 (存储结构详解2)
- replica shard : 分片副本,作为主分分片的副本存在,与主分片数据一致(容错与负载)
- node : 部署节点,多节点部署会形成集群
倒排索引
-
倒排索引:
id name 1 北京布鞋 2 南京布鞋 3 澳洲皮鞋 正排索引的搜索是按照一条文档一条文档进行匹配查询(先查id再匹配判断)
根据以上的正排索引我们会生成按name分词的倒排索引
name doc1 doc2 Doc3 北京 1 0 0 南京 0 1 0 澳洲 0 0 1 布鞋 1 1 0 倒排索引是直接进行匹配判断,获取到文档ID后,根据文档ID再去查询正排索引获取数据
倒排索引在查询语句分析出后,才去确认创建那个filed的倒排索引
timeout 超时
设置timeout时间,在超过这个时间之后会将这个时间段内查询到的数据返回,后续的还会查询但是不会返回,
所以在查询大量数据的是时候进来使用分片查询
from : 1 ,开始位置1
size : 100 , 查询100条
Query 与 filter 的区别
query 翻译是查询 , 会有相关度计算 (相关度算法后面回解释)
filter 翻译是过滤 , 只有结果没有相关度计算
query
全文检索
-
命令
- 6 版本 GET /index(索引) /type(类型)/_search
- 7 版本 GET /index(索引)/_search
-
查询body
{ "query":{ "match":{ "name":"张三" } } }
-
结果集分析
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 2.271394, "hits" : [ { "_index" : "user", "_type" : "user", "_id" : "2", "_score" : 2.271394, "_source" : { "name" : "张三", "age" : 21, "desc" : "这是一个测试用户" } } ] } }
field 描述 took 查询花费时间单位 毫秒 timed_out 是否开启timeout _shards.total 查询了多少shard _shards.successful 成功的查询了多少shard _shards.failed 多少个shard没有被查询到 hits.max_score 最大相关度事多少 hits.hits 查询结果(是经过封装过后的) hits.hits._index 该数据的索引 hits.hits._type 该数据的类型 hits.hits._score 该数据的相关度 hits.hits._id 该docment的ID hits.hits._source 该docment的内容
短语检索
-
命令与全文检索相同
-
查询body
{ "query":{ "macth_phrase":{ "name":"张三" } } }
-
结果分析与全文检索一致
高亮检索
-
命令与全文检索一致
-
查询body
{ "query":{ "match": { "name": "张" } }, "highlight": { "fields": { "name": { } } } }
-
结果集分析
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 2.271394, "hits" : [ { "_index" : "user", "_type" : "user", "_id" : "2", "_score" : 2.271394, "_source" : { "name" : "张三", "age" : 21, "desc" : "这是一个测试用户" }, "highlight" : { "name" : [ "<em>张</em>三" ] } } ] } }
field 描述 highlight 标红字的field name index的一个field 与 source中的name是一个意义
分组检索
-
命令 同上
-
查询body 按name 进行分组
{ "aggs": { "group_by_name": { "terms": { "field": "age" } } } }
-
结果分析
{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1