• windows系统中 利用kibana创建elasticsearch索引等操作


    elasticsearch之借用kibana平台创建索引

    1.安装好kibana平台 确保kibana以及elasticsearch正常运行 
    2.打开kibana平台在Dev Tools

    3.创建一个customer索引

    PUT /customer?pretty

    4.查看该索引

    GET /_cat/indices?v

    看到结果

    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
    yellow open customer 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b

    则说明创建成功

    elasticsearch之创建文档并查询

    1.在已存在的环境 
    2.打开kibana后台

    创建一个typeexternal并向第一个文档写入数据

    PUT /customer/external/1?pretty

    {

          "name": "John Doe"

    }

    返回结果

    {

      "_index" : "customer",

      "_type" : "external",

      "_id" : "1",

      "_version" : 1,

      "result" : "created",

      "_shards" : {

        "total" : 2,

        "successful" : 1,

        "failed" : 0

       },

      "created" : true

    }

    从上面的返回结果看出 已经成功创建了一个customer的索引并且外部类型为external,我们指定的id1的客户文档 
    需要注意一点,假如你没有事先创建customer索引而是直接put 一条数据,elasticsearch会自动创建一个customer索引并添加该数据

    查询已写入的数据

    GET /customer/external/1?pretty

    返回结果

    {

      "_index" : "customer",

      "_type" : "external",

      "_id" : "1",

      "_version" : 1,

      "found" : true,

      "_source" : { "name": "John Doe" }

    }

    elasticsearch之删除索引

    1.在已有的环境

    2.执行删除索引

    DELETE /customer?pretty

    返回结果

    {

      "acknowledged": true

    }

    3.检测删除是否存在

    GET /_cat/indices?v

    返回结果

    health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size

    yellow open   .kibana Ybk3WcSvSsC9bHQkJovxdA   1   1          1            0      3.1kb          3.1kb

    则说明已经删除成功

    回忆一下刚才所学

    PUT /customer

    PUT /customer/external/1

    {

      "name": "John Doe"

    }

    GET /customer/external/1

    DELETE /customer

    即可发现 这个规律

    put  /index/type/id

    get /index/type/id

    delete /index

    elasticsearch之修改替换文档

    Elasticsearch提供近乎实时的数据操作和搜索功能。默认情况下,您可以从 index/update/delete 数据的时间延迟一秒钟的延迟(刷新间隔),直到它在搜索结果中出现的时间。这是它与其他平台(如SQL)的重要区别,其中数据在事务完成后立即可用。

    Index/Update 
    我们需要更新文档,首先添加一个文档

    PUT /customer/external/1?pretty

    {

      "name": "John Doe"

    }

    然后对该文档进行更新

    PUT /customer/external/1?pretty

    {

      "name": "Jane Doe"

    }

    然后进行查看

    GET /customer/external/1?pretty

    发现其已经被修改

    若我们使用不同的id添加数据时,则会添加新的文档2

    PUT /customer/external/2?pretty

    {

      "name": "Jane Doe"

    }

    putid是必须的, 
    但是在用post添加数据时id是可选的,添加一条数据不指定id,系统会自动生成一个id给予它

    POST /customer/external?pretty

    {

      "name": "Jane Doe"

    }

    也可指定id进行添加数据

    POST /customer/external/1?pretty

    {

      "name": "Jane Doe"

    }

    elasticsearch之更新文档

    Updating Documents 
    上一篇中讲述了替换文档,也就是 删除掉老的文档并且添加新的文档

    接下来是更新文档

    我们将之前的 1 文档的name更新问 Jane Doe

    POST /customer/external/1/_update?pretty

    {

      "doc": { "name": "Jane Doe" }

    }

    我们再在文档1中一个age更新为20

    POST /customer/external/1/_update?pretty

    {

      "doc": { "name": "Jane Doe", "age":20 }

    }

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

    POST /customer/external/1/_update?pretty

    {

        "script" "ctx._source.age + = 5"

    }

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

    请注意,在撰写本文时,只能在单个文档上一次执行更新。将来,Elasticsearch可能会提供给予查询条件(如SQL UPDATE-WHERE语句)更新多个文档的功能。

    elasticsearch之删除文档

    Delete Document

    删除文档是比较简单的。此示例显示如何删除我们之前的ID2的客户

    DELETE / customer / external / 2 ?pretty

    1

    请参阅删除按查询API删除与特定查询匹配的所有文档。值得注意的是,删除整个索引而不是使用按查询删除”API删除所有文档效率更高。

    删除单个文档比较容易,若我们删除多个文档,目前只能通过bulk提交一次删除多个文档,在elasticsearch 2.0版本之前可以批量删除文档,由于批量删除导致全索引扫描,所以在2.0之后去掉了

    elasticsearch之批处理

    批处理 
    除了能够索引,更新和删除单个文档之外,Elasticsearch还提供了使用_bulkAPI批量执行上述任何操作的功能。这个功能很重要,因为它提供了一个非常有效的机制来尽可能快地进行多个操作,尽可能少的网络往返行程。

    批处理插入的两个文档

    POST /customer/external/_bulk?pretty

    {"index":{"_id":"1"}}

    {"name": "John Doe" }

    {"index":{"_id":"2"}}

    {"name": "Jane Doe" }

    批处理更新和删除之前的文档

    POST /customer/external/_bulk?pretty

    {"update":{"_id":"1"}}

    {"doc": { "name": "John Doe becomes Jane Doe" } }

    {"delete":{"_id":"2"}}

    注意,对于删除操作,没有相应的源文档,因为删除只需要要删除的文档的ID

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

    elasticsearch之Search API

    现在我们开始一些简单的搜索。 
    运行检索的一共有两种方式: 
    一种是通过发送搜索参数REST请求URL,另一种是发送请求主体 
    1.发送搜索参数REST请求

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

    返回结果

    {

      "took" : 63,

      "timed_out" : false,

      "_shards" : {

        "total" : 5,

        "successful" : 5,

        "failed" : 0

      },

      "hits" : {

        "total" : 1000,

        "max_score" : null,

        "hits" : [ {

          "_index" : "bank",

          "_type" : "account",

          "_id" : "0",

          "sort": [0],

          "_score" : null,

          "_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"}

        }, {

          "_index" : "bank",

          "_type" : "account",

          "_id" : "1",

          "sort": [1],

          "_score" : null,

          "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}

        }, ...

        ]

      }}

    返回结果我们分析下

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

    2.发送请求主体

    GET /bank/_search

    {

      "query": { "match_all": {} },

      "sort": [

        { "account_number": "asc" }

      ]

    }

    两者的区别在于

    这里的区别在于,我们不会传递q=*URI,而是向_searchAPI 发送一个JSON样式的查询请求体。我们将在下一节讨论这个JSON查询。

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

    elasticsearch之query-----执行Search

    执行Search
    在之前的讲述中,我们已经学会了一些基本的搜索参数,今天我们来进一步探讨Query DSL。我们先来看看返回的文档中的部分字段。 
    我们不希望返回所有字段,只返回我们需要的字段 

    下面例子显示出只返回 account_numer balance字段

    GET /bank/_search

    {

      "query": { "match_all": {} },

      "_source": ["account_number", "balance"]

    }

    上面Query方法中,只返回选中的字段,类似于SQL中的select * from table select account_number, balance from table等等。

    现在我们来看看查询部分 
    之前我们有了解到match_all是查询匹配所有文档。现在我们介绍一个match查询的新查询形式(即对特定字段或一组字段进行搜索)。 
    此例返回的账号为20

    GET /bank/_search

    {

      "query": { "match": { "account_number": 20 } }

    }

    下面这个例子返回address包含mill的所有账户:

    GET /bank/_search

    {

      "query": { "match": { "address": "mill" } }

    }

    下面这个例子返回address包含mill lane的所有账户:

    GET /bank/_search

    {

      "query": { "match": { "address": "mill lane" } }

    }

    相比于matchmatch_phrase匹配词组 
    下面这个例子返回address包含{ mill lane }这个词组的所有账户:

    GET /bank/_search

    {

      "query": { "match_phrase": { "address": "mill lane" }}

    }

    接下来介绍bool(ean)querybool可以将许多个小的查询合并成一个大的查询。 
    下面这个例子,返回address同时包含milllane的所有账户:

    GET /bank/_search

    {

      "query": {

        "bool": {

          "must": [

            { "match": { "address": "mill" } },

            { "match": { "address": "lane" } }

          ]

        }

      }

    }

    在上面的例子中,该bool must子句指定文档被认为是匹配的所有查询必须是真的。

    相比之下,此示例组成两个match查询,并返回address包含“mill”“lane”的所有账户:

    GET /bank/_search

    {

      "query": {

        "bool": {

          "should": [

            { "match": { "address": "mill" } },

            { "match": { "address": "lane" } }

          ]

        }

      }

    在上面的例子中,该bool should子句指定一个查询的列表,对于一个被认为是一个匹配的文档,它们必须是真的。

    此示例组成两个match查询,并返回address中既不包含“mill”也不包含“lane”的所有帐户:

    GET /bank/_search

    {

      "query": {

        "bool": {

          "must_not": [

            { "match": { "address": "mill" } },

            { "match": { "address": "lane" } }

          ]

        }

      }

    }

    在上面的例子中,该bool must_not子句指定一个查询列表,对于一个被认为是一个匹配的文档,这个查询的列表都不是true

    我们可以在查询中同时结合must,,shouldmust_not子句bool。此外,我们可以bool在任何这些bool子句中撰写查询,以模拟任何复杂的多级布尔逻辑。

    此示例返回任何40岁,但不住IDaho)的人的所有帐户:

    GET /bank/_search

    {

      "query": {

        "bool": {

          "must": [

            { "match": { "age": "40" } }

          ],

          "must_not": [

            { "match": { "state": "ID" } }

          ]

        }

      }

    }

  • 相关阅读:
    网摘习惯
    关于Application.DoEvents()
    五句话足以改变一生
    ActionForm中reset()的用法
    Java的MD5加密和解密类
    ibatis主键自动生成
    Parameter index out of range (3 > number of parameters
    ibatis 2.0 3.0 DTD
    SmartUpload在servlet中使用方法
    The prefix "tx" for element "tx:annotationdriven" is not bound.
  • 原文地址:https://www.cnblogs.com/supiaopiao/p/9084346.html
Copyright © 2020-2023  润新知