Elasticsearch Javascript API增删改查

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

查询

根据索引、类型、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增删改查,如需转载请自行联系原博主。


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
缓存 JavaScript 前端开发
深入浅出:使用Node.js构建RESTful API
【9月更文挑战第3天】在数字化浪潮中,后端开发如同搭建一座连接用户与数据的桥梁。本文将带领读者从零开始,一步步用Node.js搭建一个功能完备的RESTful API。我们将探索如何设计API的结构、处理HTTP请求以及实现数据的CRUD操作,最终通过一个简单的实例,展示如何在真实世界中应用这些知识。无论你是初学者还是有一定经验的开发者,这篇文章都会为你揭示后端开发的奥秘,让你轻松入门并掌握这一技能。
69 3
|
15天前
|
JavaScript 前端开发 API
JavaScript 验证 API
JavaScript 验证 API
18 2
|
2月前
|
JavaScript NoSQL API
深入浅出:使用Node.js构建RESTful API
【8月更文挑战第31天】本文将引导读者了解如何利用Node.js搭建一个高效、易于扩展的RESTful API。通过简单易懂的语言和逐步深入的内容组织,我们将一起探索Node.js在后端开发中的实际应用,包括环境配置、路由设计、数据处理与连接数据库等关键步骤。文章末尾,你将获得完整的项目代码示例,助你快速启动自己的API项目。
|
2月前
|
JavaScript 前端开发 API
深入浅出:使用Node.js搭建RESTful API的实践之旅
【8月更文挑战第31天】本文将带你踏上一次Node.js的探险之旅,通过实际动手构建一个RESTful API,我们将探索Node.js的强大功能和灵活性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的实践经验和深刻的技术洞见。
|
2月前
|
JavaScript 前端开发 中间件
深入浅出Node.js:从零开始构建RESTful API
【8月更文挑战第24天】在数字化时代的浪潮中,后端开发作为支撑现代网络服务的骨架,扮演着至关重要的角色。本文将通过Node.js这一高效灵活的JavaScript运行环境,引领你步入后端开发的神秘世界。我们将从基础概念出发,逐步深入到实战操作,最终构建一个功能完备的RESTful API。无论你是编程新手还是前端开发者,这篇文章都将为你揭示后端开发的奥秘,让你轻松掌握使用Node.js进行API开发的实用技巧。
|
2月前
|
JavaScript
js增删改查
js增删改查
28 1
|
2月前
|
存储 JavaScript API
Node.js中的异步API
【8月更文挑战第16天】
29 1
|
1月前
|
JSON JavaScript 中间件
深入浅出Node.js: 从零开始构建RESTful API
【8月更文挑战第34天】 在数字时代的浪潮中,掌握如何构建高效、可靠的后端服务是每一位开发者的必备技能。本文将通过浅显易懂的语言和实际代码示例,带领初学者走进Node.js的世界,一步步搭建起自己的RESTful API。无论你是编程新手,还是想扩展技术栈的老手,这篇文章都将是你的良师益友。让我们一起探索Node.js的魅力,开启后端开发之旅!
|
2月前
|
JavaScript 前端开发 API
复习JavaScript中的数组API
这段代码介绍了JavaScript数组的几种实用方法:`fill`用于用固定值覆盖指定范围内的元素;`find`查找符合条件的第一个元素;`findIndex`获取该元素的索引;`sort`对数组排序,需提供比较函数以正确排序数字;结合`slice`与`sort`可在不改动原数组的情况下进行排序;`reverse`反转数组元素;利用`map`可创建新数组并替换其中的特定元素,同时保持原数组不变。
13 1
|
2月前
|
XML JavaScript 前端开发
JavaScript中的DOM解析器DOMParser api的讲解
`DOMParser`能将XML或HTML源码字符串解析成DOM `Document`。通过`new DOMParser()`创建实例,使用`.parseFromString(string, type)`方法进行解析,其中`string`为待解析的字符串,`type`指定解析类型如`text/html`或`text/xml`等,返回一个`Document`对象。例如,可解析包含`<p>666</p>`的字符串并获取其文本内容`666`。
102 1
下一篇
无影云桌面