带你读《Elastic Stack 实战手册》之66:——3.5.19.2.Elasticsearch语言开发(Node.js)(下)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之66:——3.5.19.2.Elasticsearch语言开发(Node.js)(下)

《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.19.Elasticsearch语言开发(Python/Nodejs/Java)——3.5.19.2.Elasticsearch语言开发(Node.js)(中) https://developer.aliyun.com/article/1226589


3. Mapping API

 

Mapping 主要作用如下:

 

l 定义索引中的字段名称

l 定义字段的类型,例如数值、字符串、布尔类型等

l 定义倒排索引的相关配置,例如是否索引、记录 position 信息等。

 下面示例是在空索引上定义了其 Mapping:


client.indices.putMapping({
  index: 'author-index',
  // 默认即为 false,因 type 在 ES 7.0 被废弃
  // 另外在 ES 8.0 中 include_type_name 也将被废弃
  include_type_name: false,
  ignore_unavailable: true,
  body: {
    properties: {
      author: { type: 'keyword' },
      article: { type: 'text' },
      age: { type: 'integer' },
      interests: { type: 'text', fielddata: true },
      createTime: { type: 'date' },
    },
  },
})
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  })
  .catch(console.error);

4. Bulk API

 

Bulk API 接受索引、创建、删除和更新操作,下面以批量创建为例:

const dataset = [
  {
    author: 'Tom',
    article: 'All time is no time when it is past.',
    age: 13,
    interests: ['sports', 'painting'],
createTime: '2020-01-12',},
  {
    author: 'Mary',
    article: 'No one can call back yesterday;Yesterday will not be called again.',
    age: 15,
    interests: ['sports', 'painting', 'game', 'music'],
    createTime: '2021-03-04',
  },
  {
    author: 'David',
    article: 'Punctuality is the soul of business.',
    age: 9,
    interests: ['game'],
    createTime: '2020-09-22',
  },
];
const bulkBody = dataset.flatMap((doc, index) => [
  { index: { _index: 'author-index', _type: '_doc', _id: index + 1 } },
  doc,
]);
client
  .bulk({
    index: 'author-index',
    type: '_doc',
    // 立即刷新数据提高搜索的实时性,缺点是消耗资源较高
    refresh: true,
    body: bulkBody,
  })
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  })
  .catch(console.error);

5. Update API

 

使用指定脚本更新文档,下面代码展示了对 id 为 0 的文档的 age 字段执行 +1 操作:

client
  .update({
    index: 'author-index',
    id: 0,
    refresh: true,
    body: {
      script: {
        source: 'ctx._source.age++',
        lang: 'painless',
      },
    },
  })
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  })
  \ .catch(console.error);

6. UpdateByQuery API

 

下面代码展示了对 author 为 Mary 执行更新操作:

client
  .updateByQuery({
    index: 'author-index',
    refresh: true,
    body: {
      script: {
        source: 'ctx._source.age++',
           lang: 'painless',
      },
      query: {
        match: {
          author: 'Mary',
        },
      },
    },
  })
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  })
  .catch(console.error);

7. Search API

 

查询 article field 中带有 time 关键字的结果:

client
  .search({
    index: 'author-index',
    body: {
      query: {
        match: {
          article: 'time',
        },
      },
    },
  })
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  }) .catch(console.error);
  // search result
{
    "took":1,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":2,
            "relation":"eq"
        },
        "max_score":0.9763484,
        "hits":[
            {
                "_index":"author-index",
                "_type":"_doc",
                "_id":"1",
                "_score":0.9763484,
                "_source":{
                    "author":"Tom",
                    "article":"All time is no time when it is past.",
                    "age":13,
                    "interests":[
                        "sports",
                        "painting"
                    ],
                    "createTime":"2020-01-12"
                }
            },
             {
                "_index":"author-index",
                "_type":"_doc",
                "_id":"0",
                "_score":0.94855565,
                "_source":{
                    "author":"John",
                    "article":"Everything has its time and that time must be watched.",
                      "age":11,
                    "interests":[
                        "sports",
                        "music"
                    ],
                    "createTime":"2021-11-15"
                }
            }
        ]
    }
}


8. Aggregate API

 

下面代码展示了聚合 interests 信息的操作:


client
  .search({
    index: 'author-index',
    body: {
      aggs: {
        all_interests: {
          terms: { field: 'interests' },
        },
            },
    },
  })
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  })
  .catch(console.error);
  // search result
{
    "took":3,
    "timed_out":false,
    "_shards":{
        "total":1,
        "successful":1,
        "skipped":0,
        "failed":0
    },
    "hits":{
        "total":{
            "value":4,
                 "relation":"eq"
        },
        "max_score":1,
        "hits":[
            {
                "_index":"author-index",
                "_type":"_doc",
                "_id":"1",
                "_score":1,
                "_source":{
                    "author":"Tom",
                    "article":"All time is no time when it is past.",
                     "age":13,
                    "interests":[
                        "sports",
                        "painting"
                    ],
                    "createTime":"2020-01-12"
                }
            },
            {
                "_index":"author-index",
                "_type":"_doc",
                "_id":"3",
                "_score":1,
                "_source":{
                    "author":"David",
                    "article":"Punctuality is the soul of business.",
                    "age":9,
                    "interests":[
                        "game"
                    ],
                    "createTime":"2020-09-22"
                }
            },
            {
                "_index":"author-index",
                "_type":"_doc",
                "_id":"0",
                "_score":1,
                "_source":{
                    "author":"John",
                    "article":"Everything has its time and that time must be watched.",
                    "age":11,
                                  "interests":[
                                         "sports",
                        "music"
                    ],
                    "createTime":"2021-11-15"
                }
            },
            {
                "_index":"author-index",
                "_type":"_doc",
                "_id":"2",
                "_score":1,
                "_source":{
                    "createTime":"2021-03-04",
                    "author":"Mary",
                    "interests":[
                        "sports",
                        "painting",
                        "game",
                        "music"
                    ],
                    "article":"No one can call back yesterday;Yesterday will not be called again.",
                    "age":16
                }
            }
        ]
    },
    "aggregations":{
        "all_interests":{
            "doc_count_error_upper_bound":0,
            "sum_other_doc_count":0,
            "buckets":[
                {
                      "key":"sports",
                    "doc_count":3
                },
                {
                    "key":"game",
                    "doc_count":2
                },
                {
                    "key":"music",
                         "doc_count":2
                },
                {
                    "key":"painting",
                    "doc_count":2
                }
            ]
        }
    }
}

9. Delete Index API

 

下面展示了删除索引:

client.indices
  .delete({
    index: 'author-index',
  })
  .then(({ body }) => {
    console.log(JSON.stringify(body));
  })
  .catch(console.error);

五、github 代码

 

完整的 API 示例代码请参考:https://github.com/jkhhuse/elasticsearch-nodejs

 

参考资料

 

l https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html

 

创作人简介:

姜康,一名会点 vue、Angular、React、Node.js、Java、ELK 的伪全栈前端工程师,目前正在掌握数据开发技术栈的途中。

博客:https://www.zhihu.com/people/ant_elephant/posts

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
624 1
|
2天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
13 2
|
2天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
12 1
|
7天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第40天】在这篇文章中,我们将一起探索Node.js的奥秘,从基础概念到实际应用,逐步揭示如何利用Node.js构建高效、可扩展的后端服务。通过实际案例分析,我们将了解Node.js在现代Web开发中的应用,以及如何克服常见的开发挑战。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你在Node.js的道路上更进一步。
18 4
|
8天前
|
JavaScript 前端开发 测试技术
探索现代JavaScript开发的最佳实践
本文探讨了现代JavaScript开发中的最佳实践,涵盖ES6+特性、现代框架使用、模块化与代码分割、测试驱动开发、代码质量与性能优化、异步编程、SPA与MPA架构选择、服务端渲染和静态站点生成等内容,旨在帮助开发者提升代码质量和开发效率。
|
12天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
17天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第31天】本文将引导你进入Node.js的奇妙世界,探索其如何革新后端开发。通过浅显易懂的语言和实际代码示例,我们将一起学习Node.js的核心概念、搭建开发环境,以及实现一个简单但完整的Web应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇通往高效后端开发的大门。
|
13天前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
33 4
|
18天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第30天】本文将通过一个Node.js的简单示例,引导你进入Node.js的世界。我们将从基础概念讲起,然后一步步深入到代码实现,最后总结Node.js在后端开发中的优势和应用场景。无论你是前端开发者还是后端新手,这篇文章都将为你打开一扇了解Node.js的大门。
37 2
|
26天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
83 8

相关产品

  • 检索分析服务 Elasticsearch版