Elasticsearch Javascript API增删改查

查询

根据索引、类型、id进行查询:

client.get({
     index:'myindex',
     type:'mytype',
     id:1
},function(error, response){// ...});

根据某个查询条件,查询某个索引的所有数据

client.search({
     index:'myindex',
     q:'title:test'
},function(error, response){// ...});

复杂一点的查询:

client.search({
     index:'myindex',
     body:{
         query:{
             match:{
                 title:'test'
                }
            },
         facets:{
             tags:{
                 terms:{
                     field:'tags'
                    }
                }
            }
        }
},function(error, response){// ...});

新增

新增时,需要指定索引,类型,和id,还有保存的内容:

client.create({
     index:'myindex',
     type:'mytype',
     id:'1',
     body:{
         title:'Test 1',
         tags:['y','z'],
         published:true,
         published_at:'2013-01-01', counter:1
    }
},function(error, response){// ...});

删除

按照索引,类型和id删除:

client.delete({
     index:'myindex',
     type:'mytype',
     id:'1'
},function(error, response){// ...});

修改

修改操作通常使用update方法:

client.update({
     index:'myindex',
     type:'mytype',
     id:'1',
     body:{
        // put the partial document under the `doc` key
         doc:{
             title:'Updated'
            }
     }
},function(error, response){// ...})

一次性执行多个操作

ESClient也支持一次性执行多个操作:

client.mget({
     body:{
         docs:[ {
            _index:'indexA', _type:'typeA', _id:'1'
        },{
            _index:'indexB', _type:'typeB', _id:'1'
        },{
            _index:'indexC', _type:'typeC', _id:'1'
        }]
    }
},function(error, response){// ...});

也支持下面的风格:

client.mget({
     index:'myindex',
     type:'mytype',
     body:{ ids:[1,2,3]}
},function(error, response){// ...});

类似的也可以同时执行多个查询:

client.msearch({
     body:[
     // match all query, on all indices and types
        {},
        { query:{ match_all:{}}},
    // query_string query, on index/mytype
    {
        _index:'myindex',
        _type:'mytype'
    },{
        query:{
            query_string:{ query:'"Test 1"'}
            }
    }]
});

扩展

通过上面基本API的使用,基本可以了解js端对ESclient的操作。当然也可以使用下面的变成风格调用方法:

es[method](params)
它类似
es.method(params,回调方法)

在kibana中的_doc_send_to_es.js,使用了如下的封装:

function (method, validateVersion, body, ignore) {
      // debugger;
      var doc = this;
      // straight assignment will causes undefined values
      var params = _.pick(this._state, ['id', 'type', 'index']);
      params.body = body;
      params.ignore = ignore || [409];

      if (validateVersion && params.id) {
        params.version = doc._getVersion();
      }
      // debugger;
      return es[method](params)
      .then(function (resp) {
        // debugger;
        if (resp.status === 409) throw new errors.VersionConflict(resp);

        doc._storeVersion(resp._version);
        doc.id(resp._id);

        var docFetchProm;
        if (method !== 'index') {
          docFetchProm = doc.fetch();
        } else {
          // we already know what the response will be
          docFetchProm = Promise.resolve({
            _id: resp._id,
            _index: params.index,
            _source: body,
            _type: params.type,
            _version: doc._getVersion(),
            found: true
          });
        }

        // notify pending request for this same document that we have updates
        docFetchProm.then(function (fetchResp) {
          // use the key to compair sources
          var key = doc._versionKey();

          // clear the queue and filter out the removed items, pushing the
          // unmatched ones back in.
          var respondTo = requestQueue.splice(0).filter(function (req) {
            var isDoc = req.source._getType() === 'doc';
            var keyMatches = isDoc && req.source._versionKey() === key;
            debugger;
            // put some request back into the queue
            if (!keyMatches) {
              requestQueue.push(req);
              return false;
            }

            return true;
          });

          return courierFetch.fakeFetchThese(respondTo, respondTo.map(function () {
            return _.cloneDeep(fetchResp);
          }));
        });

        return resp._id;
      })
      .catch(function (err) {
        // cast the error
        throw new errors.RequestFailure(err);
      });
    };

因此使用时,又变成了:

xxx.call(this, 'create', false, body, []);

一层一层封装了很多,但是只要慢慢屡清除,就知道怎么使用了。

本文转自博客园xingoo的博客,原文链接:Elasticsearch Javascript API增删改查,如需转载请自行联系原博主。

时间: 2024-07-31 08:00:01

Elasticsearch Javascript API增删改查的相关文章

javascript Xml增删改查(IE下)操作实现代码_javascript技巧

html文件: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>j

javascript实现信息增删改查的方法_javascript技巧

本文实例讲述了javascript实现信息增删改查的方法.分享给大家供大家参考.具体实现方法如下: <body> <div align="center"> <h1>显示所有的用户界面</h1> <div style="border: 1px red solid; margin-bottom: 100px; padding: 10px 10%;"> <table border="1px&quo

Elasticsearch增删改查 之 —— Get查询

GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在:或者执行CURD中的文档查询.与检索不同的是,GET查询是实时查询,可以实时查询到索引结果.而检索则是需要经过处理,一般默认是1秒钟吧...才能搜索到.合理利用这些方法,可以更灵活的使用Elasticsearch. 更多内容参考ELK教程 阅读这篇文档,发现自己对很多地方不是很理解.比如存储机制.版本维护等等.暂时先做为阶段性的学习吧...后续更新在回来补补.... 查询样例 Get API允许基于ID字段从Ela

Elasticsearch增删改查 之 —— Delete删除

删除文档也算是常用的操作了...如果把Elasticsearch当做一款普通的数据库,那么删除操作自然就很常用了.如果仅仅是全文检索,可能就不会太常用到删除. Delete API 删除API,可以根据特定的ID删除文档. $ curl -XDELETE 'http://localhost:9200/twitter/tweet/1' 会返回下面的消息: { "_shards" : { "total" : 10, "failed" : 0, &qu

Zookeeper 客户端API调用示例(基本使用,增删改查znode数据,监听znode,其它案例,其它网络参考资料)

9.1 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话 它提供以下几类主要方法  : 功能 描述 create 在本地目录树中创建一个节点 delete 删除一个节点 exists 测试本地是否存在目标节点 get/set data 从目标节点上读取 / 写数据 get/set ACL 获取 / 设置目标节点访问控制列表信息 get children 检索一个子节点上的列表 sync 等待要被传送的数据            

javascript js 操作数组 增删改查的简单实现_javascript技巧

函数定义 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) return i; } return -1; }; Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }

浅谈JavaScript中数组的增删改查_javascript技巧

数组的增加 •ary.push()   向数组末尾添加元素,返回的是添加后新数组的长度,原有数组改变 •ary.unshift()  向数组开头添加元素,返回的是添加后新数组的长度,原有数组改变 • var ary=[1,2,3,4];   var res=ary.unshift(6);   console.log(res); ---->5   返回的是新数组的长度•ary.splice(n,m,x)从索引n开始删除m个元素,把新增的元素X放在索引n的前面,把删除的元素当成一个新数组返回,原有数

ASP.NET MVC Web API 学习笔记---联系人增删改查

本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系人          说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟    1.       Web API中包含的方法 Action HTTP method Relative URI GetAllContact GET /api/contact GetContact GET /api/

Elasticsearch增删改查 之 —— mget多文档查询

之前说过了针对单一文档的增删改查,基本也算是达到了一个基本数据库的功能.本篇主要描述的是多文档的查询,通过这个查询语法,可以根据多个文档的查询条件,返回多个文档集合. 更多内容可以参考我整理的ELK文档教程 multi Get 多字段查询可以设置多个文档查询条件,每个查询条件在结构上都比较类似: curl 'localhost:9200/_mget' -d '{ "docs" : [ { "_index" : "test", "_typ