ES简介 ES简介 // ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。 ES的倒排索引 // 通俗的讲: 倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引。有了倒排索引,就能实现 o(1)时间复杂度的效率检索文章了,极大的提高了检索效率。 // 专业的讲: 倒排索引,从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表;倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构;FST 有两个优点: // (1) 空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间; // (2) 查询速度快。O(len(str))的查询时间复杂度;
ES基础概念 // 从大到小一次介绍: 集群: cluster : ES本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行1个或者多个Elastic实例,完整的分布式服务称为集群; 节点: node : 组成集群的一个个实例,其中一个实例称为一个节点; 分片: shard : 一个数据非常大,需要对数据分块存储,这里的一块数据称为一个shard (在创建索引的时候,就需要指定分块的数量和副本个数); 副本: replica : 数据分块后,需要进行备灾,一个块损坏后,需要有其他副本顶上,这里的副本其实也是一个shard; 索引: index : 类似关系型数据库中的数据库,目前我们说的一个个检索引擎,实际上就是一个个的index; 类型: type : 类似关系型数据库中的数据表,跟数据库不同的是,一个index现在只允许创建一个type, 以后的版本中就没有type的概念了; 文档: document : 存入索引中的一条具体的数据,由多个字段组成; 字段: field : 文档中的一个属性; 词项: term : 搜索时的一个单位,代表了文本中的一个词; 词元: token : 词项在字段文本中的一次出现,包括词项的文本、开始、结束的偏移以及词条类型;
// DSL: Domain Specified Language:特定领域的语言 下面看到的拼的ES数据包的结构称为DSL,可以写到超级复杂
// 参考: http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
ES基础信息查询:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ES 基础信息查询 curl -u user :111 -X GET '1.1.1.1:8200/_cat' /_cat/allocation /_cat/shards /_cat/shards/{index} /_cat/master /_cat/nodes /_cat/tasks /_cat/indices /_cat/indices/{index} /_cat/segments /_cat/segments/{index} /_cat/count /_cat/count/{index} /_cat/recovery /_cat/recovery/{index} /_cat/health /_cat/pending_tasks /_cat/aliases /_cat/aliases/{alias} /_cat/thread_pool /_cat/thread_pool/{thread_pools} /_cat/plugins /_cat/fielddata /_cat/fielddata/{fields} /_cat/nodeattrs /_cat/repositories /_cat/snapshots/{repository} /_cat/templates curl -u user :111 -X GET '1.1.1.1:8200/_cat/indices?v' 返回:
创建索引: 设置分片数和副本数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 创建索引: 设置分片数和副本数 curl -u user :111 -X PUT '1.1.1.1:8200/abcd_efg?pretty' -H 'Content-Type: application/json' -d ' { "settings": { "number_of_shards": 6, "number_of_replicas": 1 } }' { "acknowledged" : true , "shards_acknowledged" : true , "index" : "abcd_efg" }
创建索引结构、查询索引结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 创建索引结构 curl -u user :111 -X PUT '1.1.1.1:8200/abcd_efg/entinfo/_mapping?pretty=true' -H 'Content-Type: application/json' -d ' { "entinfo":{ "dynamic":"strict", "properties":{ "bdCode":{ "type":"keyword" }, "logo":{ "type":"keyword", "index":false }, "entName" : { "type" : "text", "analyzer" : "ik_max_word" }, "coreName" : { "type" : "keyword" } } } }' { "acknowledged" : true } 查询索引结构 curl -u user :111 -X GET '1.1.1.1:8200/abcd_efg/entinfo/_mapping?pretty=true' { "abcd_efg" : { "mappings" : { "entinfo" : { "dynamic" : "strict" , "properties" : { "bdCode" : { "type" : "keyword" }, "coreName" : { "type" : "keyword" }, "entName" : { "type" : "text" , "analyzer" : "ik_max_word" }, "logo" : { "type" : "keyword" , "index" : false } } } } } }
添加索引数据、查看索引数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 添加索引数据 curl -u user :111 -X PUT '1.1.1.1:8200/abcd_efg/entinfo/287832028393?pretty' -H 'Content-Type: application/json' -d ' { "bdCode": 287832028393, "entName": "北京网讯科技有限公司", "logo": "https://zhengxin-pub.bj.bcebos.com/logopic/6829dfa6c9b4714a6456796fd887c870_fullsize.jpg", "coreName": "robin" }' { "_index" : "abcd_efg" , "_type" : "entinfo" , "_id" : "287832028393" , "_version" : 1 , "result" : "created" , "_shards" : { "total" : 2 , "successful" : 1 , "failed" : 0 }, "_seq_no" : 0 , "_primary_term" : 1 } 查看指定key的索引数据 curl -u user :111 -X GET '1.1.1.1:8200/abcd_efg/entinfo/287832028393?pretty' { "_index" : "abcd_efg" , "_type" : "entinfo" , "_id" : "287832028393" , "_version" : 1 , "found" : true , "_source" : { "bdCode" : 287832028393 , "entName" : "北京网讯科技有限公司" , "logo" : "https://zhengxin-pub.bj.bcebos.com/logopic/6829dfa6c9b4714a6456796fd887c870_fullsize.jpg" , "coreName" : "robin" } }
基础数据查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 基础数据查询 curl -u user :111 -X GET "1.1.1.1:8200/abcd_efg/entinfo/_search?pretty=true" -H 'Content-Type: application/json' -d ' { "from": 0, "size": 2, "query": { "match": { "entName": { "query": "" } } }, "_source":[ "entName","logo" ] }' { "took" : 2 , "timed_out" : false , "_shards" : { "total" : 6 , "successful" : 6 , "skipped" : 0 , "failed" : 0 }, "hits" : { "total" : 1 , "max_score" : 0.8630463 , "hits" : [ { "_index" : "abcd_efg" , "_type" : "entinfo" , "_id" : "287832028393" , "_score" : 0.8630463 , "_source" : { "entName" : "北京网讯科技有限公司" , "logo" : "https://zhengxin-pub.bj.bcebos.com/logopic/6829dfa6c9b4714a6456796fd887c870_fullsize.jpg" } } ] } }
pretty 在任意的查询字符串 中增加pretty
参数,会让Elasticsearch **美化输出(pretty-print)**JSON响应以便更加容易阅读。
_source
字段不会被美化,它的样子与我们输入的一致。
dynamic
动态映射(dynamic:true):动态添加新的字段(或缺省)。
静态映射(dynamic:false):忽略新的字段。在原有的映射基础上,当有新的字段时,不会主动的添加新的映射关系,只作为查询结果出现在查询中。
严格模式(dynamic: strict):如果遇到新的字段,就抛出异常。
操作 插入