es

https://blog.csdn.net/u014431852/article/details/52830938

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html 官网

https://www.cnblogs.com/Wolfmanlq/p/5984443.html 番外重要

ES基本概念:

curl:linux命令http访问方式

近实时:es从索引文档的时间到可搜索的时间有轻微延迟(一秒左右)

集群:es集群是多个es节点的集合,节点一起保存整个数据,并提供跨节点的联合索引和搜索功能,集群默认名为elasticsearch。此名称很重要,节点可设置为通过名称加入集群。

不同的环境不能使用相同的集群名称,否则可能导致加入到错误的集群。

节点:es节点的名称默认由启动时分配随机唯一标识符,也可以自定义。此名称很重要,因为我们需要确定网络中哪些服务器和es集群中哪些节点对应。

索引:索引是对相似特征的文档/数据的关键字提取的集合,以便于快速查找到目标文档/数据。es中可以有不同的索引比如客户数据的索引,产品目录的索引,订单数据的索引等。索引用名称标识(小写),用于对目标文档执行索引,搜索,更新和删除。

文档:文档是可被索引的基本信息单位。es中文档指根对象序列化而来的JSON。文档除了数据外还包括元数据(用来描述数据的数据),es文档元数据有_index(文档存储的位置),_type(文档代表的对象类型),_id(文档的唯一编号,可以由es生成,也可以自己设定)。

分片:


ES安装:

探索你的集群:

https://www.elastic.co/guide/en/elasticsearch/reference/current/_cluster_health.html


KIBANA可视化es客户端:

查看索引:GET / _cat / indices?v

创建索引:PUT /customer?pretty

索引(动词)和查询一个文档:

PUT /customer/_doc/1?pretty

  GET /customer/_doc/1?pretty

删除索引:

DELETE /customer?pretty

更新文档:

POST / customer / _doc / 1 / _update?漂亮
{
  “doc”:{“name”:“Jane Doe”}
}

此示例显示如何通过将名称字段更改为“Jane Doe”并同时向其添加年龄字段来更新我们以前的文档(ID为1):

POST / customer / _doc / 1 / _update?漂亮
{
  “doc”:{“name”:“Jane Doe”,“年龄”:20}
}

更新也可以通过使用简单的脚本来执行。本示例使用脚本将年龄增加5:

POST / customer / _doc / 1 / _update?漂亮
{
  “script”:“ctx._source.age + = 5”
}

在上面的例子中,ctx._source引用了即将更新的当前源文档。


删除文档:

DELETE /customer/_doc/2?pretty

批量操作文档:

As a quick example, the following call indexes two documents (ID 1 - John Doe and ID 2 - Jane Doe) in one bulk operation:

POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

This example updates the first document (ID of 1) and then deletes the second document (ID of 2) in one bulk operation:

POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}

请注意,对于上面的删除操作,后面没有对应的源文档(文档内容),因为删除操作只需要删除文档的标识。

批量API不会因其中一个操作失败而失败。如果一个动作因任何原因失败,它将继续处理其后的其余动作。当批量API返回时,它将为每个操作提供一个状态(按照它发送的相同顺序),以便您可以检查特定操作是否失败。


搜索:

搜索API编辑

现在让我们开始一些简单的搜索。有运行检索两种基本方式:一种是通过发送搜索参数REST请求URI和其他通过发送他们REST请求主体请求主体方法允许您更具表现力,并以更具可读性的JSON格式定义您的搜索。我们将尝试请求URI方法的一个示例,但在本教程的其余部分中,我们将专门使用请求主体方法。

用于搜索的REST API可以从_search端点访问本示例返回银行索引中的所有文档:

GET / bank / _search?q = *&sort = account_number:asc&pretty
 

首先解析搜索调用。我们_search在银行索引中搜索(端点),并且该q=*参数指示Elasticsearch匹配索引中的所有文档。sort=account_number:asc参数表示account_number按升序使用每个文档字段对结果进行排序。pretty参数同样告诉Elasticsearch返回漂亮的JSON结果。

答案(部分显示):

{
  “拿”:63,
  “timed_out”:false,
  “_shards”:{
    “总数”:5,
    “成功”:5,
    “跳过”:0,
    “失败”:0
  },
  “点击”:{
    “总数”:1000,
    “max_score”:null,
    “命中”:[{
      “_index”:“银行”,
      “_type”:“_doc”,
      “_id”:“0”,
      “排序”:[0],
      “_score”:null,
      “_source”:{“account_number”:0,“balance”:16623,“firstname”:“Bradshaw”,“lastname”:“Mckenzie”,“年龄”:29,“性别”:“F” :“哥伦布广场244”,“雇主”:“Euron”,“email”:“[email protected]”,“城市”:“Hobucken”,“州”:“CO”}
    },{
      “_index”:“银行”,
      “_type”:“_doc”,
      “_id”:“1”,
      “排序”:[1],
      “_score”:null,
      “_source”:{“account_number”:1,“balance”:39225,“firstname”:“Amber”,“lastname”:“Duke”,“年龄”:32,“性别”:“M” :“880 Holmes Lane”,“雇主”:“Pyrami”,“email”:“[email protected]”,“城市”:“Brogan”,“州”:“IL”}
    },...
    ]
  }
}

至于回应,我们看到以下部分:

  • took - Elasticsearch执行搜索的时间(以毫秒为单位)
  • timed_out - 告诉我们搜索是否超时
  • _shards - 告诉我们搜索了多少碎片,以及搜索碎片成功/失败的次数
  • hits - 搜索结果
  • hits.total - 符合我们搜索条件的文件总数
  • hits.hits - 实际的搜索结果数组(默认为前10个文档)
  • hits.sort - 为结果排序键(按分数排序时缺失)
  • hits._score并且max_score- 现在忽略这些字段

以上是使用替代请求主体方法的上述相同的精确搜索:

GET /银行/ _搜索
{
  “query”:{“match_all”:{}},
  “排序”:[
    {“account_number”:“asc”}
  ]
}
 

这里的区别在于,不是传入q=*URI,而是向_searchAPI 提供JSON风格的查询请求体我们将在下一节讨论这个JSON查询。

重要的是要明白,一旦你得到你的搜索结果,Elasticsearch完全完成了请求,并没有维护任何种类的服务器端资源或打开游标到你的结果。这与许多其他平台(例如SQL)形成了鲜明对比,其中您可能最初会首先获得查询结果的部分子集,然后如果您想要获取(或翻阅)其余部分,则必须不断返回服务器的结果使用某种有状态的服务器端游标。

番外重要:

ElasticSearch是一个NoSQL类型的数据库,本身是弱化了对关系的处理,因为像lucene,es,solr这样的全文检索框架对性能要求都是比较高的,一旦出现join这样的操作,性能会非常差,所以在使用搜索框架时,我们应该避免把搜索引擎当做关系型数据库用。

番外重要:

在Elasticsearch中,我们的数据都在分片中被存储以及索引,索引只是一个逻辑命名空间,它可以将一个或多个分片组合在一起。然而,这只是一个内部的运作原理——我们的程序可以根本不用关心分片。对于我们的程序来说,我们的文档存储在索引中。剩下的交给Elasticsearch就可以了。

番外重要:

PUT /{index}/{type}/{id}
{
  "field": "value",
  ...
}

几个例子。如果我们的索引叫做"website",我们的类型叫做 "blog",然后我们选择"123"作为ID的编号。这时,请求就是这样的:

PUT /website/blog/123
{
  "title": "My first blog entry",
  "text":  "Just trying this out...", "date": "2014/01/01" }



猜你喜欢

转载自blog.csdn.net/u010287873/article/details/80734169
es