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,而是向_search
API 提供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" }