elasticsearch知识总结-1

 

1:本地安装es,解压,启动elasticsearch.bat

2:安装curl,配置环境变量,curl “http://localhost:9200/?pretty”

注意:windows命令行这里使用双引号,或者不加双引号

3:es交互:java语言使用es内置的客户端

其他语言使用RESTful API通过端口9200和es通信

4:es请求格式:curl -X<VERB> ‘<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>’ -d ‘<BODY>’

VERB:GET,PUT,POST等

PROTOCOL:http或者https

HOST:es集群中任意节点主机名,或者localhost代表本地机器上的节点

PORT:运行es http服务的端口号,默认9200

PATH:API的终端路径

QUERY_STRING:可选的查询字符串参数;例:-pretty将格式化输出json返回值

BODY:json格式的请求体

5:安装kibana,在本地浏览器访问http://localhost:5601(连接远程es需要在kibana.yml配置文件中修改elasticsearch.url),使用Develop Tools方便与es交互(Sense插件存在content type不支持的问题)

6:HTTP命令:

PUT:创建和更新文档

GET:检索文档

HEAD:检查文档是否存在(存在:200 - ok;不存在:404 not found)

DELETE:删除文档

(1)GET /index/type/_search 查询/index/type下所有信息,默认返回10条结果

(2)GET /index/type/_search?q=key:value 查询条件赋值给参数q(必须为q)

(3)GET /index/type/_search

{

“query” : {

“match” : {

“key” : “value”

}

}

} //使用查询表达式搜索,请求使用json构造

 

(4)GET /index/type/_search

{

    "query" : {

        "bool": {

            "must": {

                "match" : {

                    "last_name" : "smith" //match查询

                }

            },

            "filter": {

                "range" : {

                    "age" : { "gt" : 30 } //使用range过滤器(age>30)

                }

            }

        }

    }

}

 

(5)GET/index/type/_search

{

    "query" : {

        "match" : { //精确匹配使用:match_phrase

            "key" : "value1 value2"

        }

    }

//高亮搜索:返回结果增加hightlight字段,包含匹配的key,value信息,使用html标签<em>

"highlight": {

"fields" : {

"about" : {}

}

}

}

//es搜索默认按照相关性得分排序(key中包含value1或者value2都能搜索出来)

查询匹配程度:区别于传统关系型数据库(一条记录要么匹配要么不匹配)

 

(6)GET /index/type/_search

{

    "query": { //查找key1为value1的文档

      "match": {

        "key1": "value1"

      }

    },

    "aggs" : { //聚合功能:基于数据做分析结果

        "all_key2" : {

            "terms" : { "field" : "key2" }, //对key2字段的value统计分析

            "aggs" : {

//对统计后key2的每一个value的集合,求对应key3的平均值

                "avg_age" : {

                    "avg" : { "field" : "key3" }

                }

            }

        }

    },

"sort": [

     { "date":   { "order": "desc" }},

     { "_score": { "order": "desc" }}

] //按照date和_score排序(多级排序)

}

出现问题

(1)未设置index的mapping时,第一次向索引中添加文档,会生默认成对应字段的类型信息;

(2)对某个字段排序或者聚合查询时,需要将key的value加载到内存提高查询速度,这个时候,字段的fileddata属性应该设置为true,而默认生成的mapping没有添加这个属性;

(3)解决办法:

PUT /index/_mapping/type?update_all_types

{

  "properties": {

    "key": {

      "type":     "text",

      "fielddata": true

    }

  }

}

es的mapping支持创建,删除,增加字段,但不支持字段类型的修改;因此使用es时,需要提前创建好所有字段的mapping

(4)设置mapping示例:

curl  -XPOST

"http://ip:port/index/type/_mapping?pretty" -d '

{

"_source":{"enabled":true},

"properties":{

"rtx":{

"type":"string",

"index":"not_analyzed",

"store":"true"

},

"timeStamp":{

"type":"date",

"format":"yyyy-MM-dd HH:mm:ss",

"index":"not_analyzed",

"store":"true"

},

"params":{

"type":"text",

"analyzer":"ik_smart"

}

}

}'

7:es集群原理:

(1)一个或多个节点共同承担数据和负载的压力;

(2)当有节点从集群添加或者移除,集群将会重新平均分布所有数据;

(3)主节点负责管理集群范围内所有变更,如节点,索引的添加删除;不涉及文档级别变更和搜索;

(4)用户可以将请求发送到集群中任何一个节点,每个节点都知道任意文档所处的位置;

8:GET /_cluster/health获取集群健康信息;

返回结果中的status字段:

(1)green:所有主分片和副本分片都正常运行

(2)yellow:所有主分片正常运行,副本分片存在不正常运行

(3)red:有主分片没能正常运行

9: (1)取回一个文档:GET /index/type/id?pretty

pretty参数使json响应体更加可读

(2)返回文档一部分:GET /index/type/id?_source=key1,key2

(3)检查文档是否存在:curl -i -XHEAD http://localhost:9200/website/blog/123

(仅仅代表检查的时候不存在)

(4)GET /_mget

{

   "docs" : [

      {

         "_index" : "website",

         "_type" :  "blog",

         "_id" :    2

      },

      {

         "_index" : "website",

         "_type" :  "pageviews",

         "_id" :    1,

         "_source": "views"

      }

   ]

} //取回多个文档

 

(5)POST /_bulk

{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }}

{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}

{ "title":  "My first blog post" }

{ "index":  { "_index": "website", "_type": "blog" }}

{ "title":  "My second blog post" }

{ "update": { "_index": "website", "_type": "blog", "_id": "123", "retry_on_conflict" : 3} }

{ "doc" : {"title" : "My updated blog post"} }

//代价较小的批量操作

 

10:路由一个文档到一个分片中:

shard = hash(routing) % number_of_primary_shards

routing:可变值,默认时文档id

number_of_primary_shards:主分片的数量

11:新建,索引和删除单个文档

 

12:es搜索的三个概念:

映射(Mapping):描述数据在每个字段内如何存储

分析(Analysis):全文是如何处理使之可以被搜索

(1)字符串按顺序通过每个字符过滤器(去掉HTML或者转换&)

(2)字符串被分词器分为单个词条(遇到空格,标点等可能拆分成词条)

(3)词条按顺序通过每个token过滤器(小写化,删除无用词,增加词条)

领域特定查询语言(Query DSL):es强大灵活的查询语言:

 

13:es6.0之后

(1)不允许一个index下面有多个type

(2)字段类型使用text代替string

(3)字段index属性使用true false代替analyzed和not_analyzed

14:es分页:GET /_search?size=5&from=10

size:显示应该返回的结果数量,默认是10;

from:显示应该跳过的初始结果数量,默认是0

分布式系统深度分页存在问题:请求第10000页,结果从10001到10010,每个分片不得不产生前10010个结果外,协调节点对全部50050个结果排序最后丢弃掉这些结果中的50040个结果

15:内部对象如何被索引:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值