Nodejs 第八十四章(ElasticSearch搜索)

在這里插入圖片描述

ElasticSearch基本用法在之前的篇章介紹過了 這里不在過多闡述

模擬假數據

  1. 安裝庫 @faker-js/faker 模擬假數據的一個庫非常好用支持中文
  2. 使用中文 locale: [zh_CN], 設置即可
  3. 生成名字,郵箱,手機號,id,年齡,性別
  4. 生成完成之后使用fs寫入data.json文件
import { Faker, zh_CN, } from '@faker-js/faker'
const faker = new Faker({locale: [zh_CN],
})
const generate = (total = 100) => {let arr = []for (let i = 0; i < total; i++) {arr.push({name: faker.person.fullName(),email: faker.internet.email(),phone: faker.string.numeric({ length: 11 }),id: faker.string.uuid(),age: faker.number.int({ min: 18, max: 60 }),isMale: faker.datatype.boolean(),})}return arr
}fs.writeFileSync('./data.json', JSON.stringify(generate(), null, 2))

假數據

 [{"name": "隱強","email": "k7nggq88@126.com","phone": "79533230542","id": "945e80bb-9ece-428b-925c-1ed01e26d660","age": 44,"isMale": true},......]

Node.js集成ElasticSearch

  1. fs讀取剛才寫入的文件
  2. 安裝ElasticSearch的包@elastic/elasticsearc
  3. 連接elastic 兩種模式可以使用apiKey,也可以用賬號密碼的模式,這兒使用賬號密碼,生產使用apiKey
  4. 檢查有沒有創建過這個索引如果重復創建會報錯
  5. 如果沒有創建過這個索引就創建,并且構建映射表 也就是字段 properties
  6. 批量插入數據封裝一個函數 bulkInsert
  7. 實現插入的函數 bulkInsert
  8. 搜索
//1.第一步
const data = fs.readFileSync('./data.json', 'utf-8')
const arr = JSON.parse(data)
//2.第二步
import { Client } from '@elastic/elasticsearch';
//3.第三步
const client = new Client({node: 'http://localhost:9200',auth: {username: 'elastic',password: '123456',},
});
//4.第四步
const exists = await client.indices.exists({ index: 'users' });
//5.第五步
if (!exists) {await client.indices.create({index: 'users',mappings: {properties: {name: { type: 'text', fields: { keyword: { type: 'keyword', } } },email: { type: 'text' },phone: { type: 'text' },id: { type: 'text' },age: { type: 'integer' },isMale: { type: 'boolean' },}}})//6.第六步await bulkInsert(arr);
}
//7.第七步
const bulkInsert = async (data) => {const operations = [];data.forEach((item) => {operations.push({index: {_index: 'users',_id: item.id},})operations.push(item)})//批量插入await client.bulk({ refresh: true, operations })
}
//8.搜索
const response = await client.search({index: 'users',query: {match_all: {},},size: 100
});
console.log(response.hits.hits);

搜索詳解

根據上面代碼 + 講解基本已經大概了解其工作原理,ElasticSearch最強大的就是他的搜索能力,可以各種組合搜索,我們分別演示一下

1.全部查詢

match_all 就是全部查詢 注意默認只返回10條,你可以配置size看你想要返回的條數

const response = await client.search({index: 'users',query: {match_all: {}, //空對象即可},size: 100 //返回100條
});

2.模糊查詢

模糊查詢會進行分詞,匹配所有的關鍵詞

使用match進行模糊查詢,輸入需要匹配的字段如name 后面是 value 如 隱強 他會匹配數據中所有包含 隱強 這兩個字的內容 我的數據中含有 隱強 蔣強 高啟強 因此返回三條

const response = await client.search({index: 'users',query: {match: {name: '隱強'},},size: 100
});
console.log(response.hits.hits);

3.精確查詢

如果需要支持精準查詢 需要設置 name: { type: 'text', fields: { keyword: { type: 'keyword', } } }, 因為text類型默認會支持分詞,為了全文搜索設計,但是如果要同時支持 全文匹配 + 精準匹配 需要設置 type keyword

注意這兒就不使用match了,改成term [字段.keyword] = [value] 查詢

const response = await client.search({index: 'users',query: {term: {'name.keyword': '隱強'}},size: 100
});
console.log(response.hits.hits);

4.組合查詢
  1. must 必須匹配的條件 這兒匹配了(隱強)
  2. filter 條件過濾 這兒匹配了年齡(20-60歲的人)
  3. must_not 必須不匹配 (這兒表示返回的值不能有帶國字的人)
  4. should 可選的條件 (這兒匹配了隱強)
const response = await client.search({index: 'users',query: {bool:{must: {match: {name: '隱強'}},filter: {range: {age: {gte: 20,lte: 60}}},must_not: {match: {name: '國'}},should: {match: {name: '隱強'}}}},size: 100
});
console.log(response.hits.hits);

5.聚合查詢

聚合查詢在Elasticsearch中用來對數據進行統計、匯總和分析,它能夠提供關于數據集的深入見解和洞察

案例 統計各個年齡出現的次數 注意使用 aggs 不再是 query

const response = await client.search({index: 'users',aggs: {age: {terms: {field: 'age'}}},size: 100
});
console.log(response.aggregations.age.buckets);

返回值

key:表示聚合的字段值,這里看起來是年齡。

doc_count:表示具有該年齡的文檔數量。

[{ key: 32, doc_count: 6 }, //表示年齡32 出現6次{ key: 23, doc_count: 4 }, //表示年齡23 出現4次{ key: 28, doc_count: 4 }, //.......{ key: 29, doc_count: 4 },{ key: 49, doc_count: 4 },{ key: 51, doc_count: 4 },{ key: 60, doc_count: 4 },{ key: 21, doc_count: 3 },{ key: 22, doc_count: 3 },{ key: 24, doc_count: 3 }
]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44894.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44894.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44894.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ATT 和 GATT:數據表示和交換

背景介紹 BLE的通信和以太網&#xff0c;wifi有個重大的不同是&#xff1a;BLE通信的設備往往有特定的功能。且這個功能不會在運行中發生變化。 因此藍牙設備通信的時候&#xff0c;只能訪問預先定義好的&#xff08;也就是配置文件profile&#xff09;的功能。 那profile里寫…

批量制作word表格

問題背景 將excel表中的成績內容制作為成績單&#xff0c;每頁對應一個學員的成績&#xff0c;方便打印 代碼實現 ## 導入包 import pandas as pd from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING# 讀取 Excel 內容 df pd.read_e…

APP接入聚合廣告SDK會影響上架應用市場嗎?

SDK是移動互聯網的基本技術接入方式&#xff0c;而廣告聚合SDK僅是實現廣告請求返回的功能&#xff0c;所以本身不會有任何問題&#xff0c;而各家應用市場會對具體的廣告展現方式等會有不同的要求&#xff0c;開發者可以根據具體的市場需要要求廣告平臺來配合進行相關設置即可…

精通 mysqldumpslow:深度分析 MySQL 慢查詢日志

引言 在數據庫管理與優化的領域中&#xff0c;慢查詢日志是識別性能瓶頸的金礦。mysqldumpslow 工具是挖掘這座金礦的利器&#xff0c;它幫助我們分析 MySQL 慢查詢日志并提取關鍵信息。本文將詳細介紹 mysqldumpslow 的核心選項&#xff0c;并通過實例展示如何使用這些選項來…

IP 地址:優化網絡游戲

IP地址和網絡游戲 在現代網絡游戲中&#xff0c;IP地址不僅用于服務器分配&#xff0c;還能針對性進行玩家匹配與優化網絡延遲。本文將探討IP地址在網絡游戲中的具體應用。 *服務器分配* 全球服務器分布&#xff1a; 網絡游戲需要在全球范圍內提供快速、穩定的連接&#xff…

筆記

https://qoj.ac/problem/8008 不難發現&#xff0c; 隨機到某些位置&#xff0c;之后最短路 先O&#xff08;nm&#xff09;預處理出能到的點&#xff0c; 考慮最小的隨機位置 首先&#xff0c;我們將求和式進行展開&#xff1a; ∑ j 1 ∞ j ( n ? i n ) j ? 1 i n \s…

libcoap3對接華為云平臺

文章目錄 前言一、平臺注冊二、引入源碼庫1.libcoap倉庫編譯2.分析網絡報文3.案例代碼4.編譯&運行 總結 前言 通過libcoap3開源代碼庫對接華為云平臺&#xff0c;本文章將討論加密與不加密的方式對接華為云平臺。 一、平臺注冊 首先&#xff0c;你需要在華為云平臺上創建…

文華財經盤立方博易大師boll布林帶指標公式源碼

TT:TIME>850&&TIME<1150; MID:MA(CLOSE,26);//求N個周期的收盤價均線&#xff0c;稱為布林通道中軌 TMP2:STD(CLOSE,26);//求M個周期內的收盤價的標準差 TOP:MID2*TMP2;//布林通道上軌 BOTTOM:MID-2*TMP2;//布林通道下軌 A:EVERY(ISDOWN,2)&&TT&&…

【鴻蒙學習筆記】使用axios進行HTTP數據請求

官方文檔&#xff1a;網絡管理開發概述 目錄標題 訪問淘寶公開接口&#xff08;測試數據&#xff09;第1步&#xff1a;module.json5 配置網絡授權第2步&#xff1a;下載axios第3步&#xff1a;源碼第4步&#xff1a;啟動模擬器第5步&#xff1a;啟動entry第6步&#xff1a;操…

python中from import的用法詳解

在Python中&#xff0c;from ... import ... 語句用于從指定的模塊、包或對象中導入特定的類、函數、變量等。這種導入方式可以讓你在代碼中使用這些元素時不需要每次都指定它們所屬的模塊名&#xff0c;從而簡化代碼&#xff0c;提高可讀性。下面詳細解釋這個語法的用法。 基…

Linux 常用命令 - mkdir【創建新目錄】

簡介 mkdir 源自于 make directory 的縮寫&#xff0c;該命令在 Linux 中用于創建一個或多個新目錄。默認情況下&#xff0c;它創建的是空目錄&#xff0c;如果待創建的目錄已存在&#xff0c;則會提示已存在而不能繼續創建&#xff0c;不會覆蓋已有文件。如果目錄不存在&…

論文AI痕跡過重怎么辦?AI降痕工具來幫忙

如何有效利用AI工具提高工作效率&#xff1f;探索這5款頂級AI寫作工具 不知道大家有沒有發現&#xff0c;隨著人工智能技術的快速發展&#xff0c;AI工具正逐漸滲透到我們日常生活的各個方面&#xff0c;極大地提高了我們的工作和學習效率。無論是AI寫作、AI繪畫、AI思維導圖&…

動態架構革新:Mojo模型自定義架構調整指南

動態架構革新&#xff1a;Mojo模型自定義架構調整指南 在機器學習模型部署的過程中&#xff0c;模型架構的靈活性和可定制性是至關重要的。Mojo模型&#xff0c;作為H2O.ai提供的一種模型部署格式&#xff0c;主要用于模型的序列化和預測。雖然Mojo模型本身不支持直接修改已部…

排序(一)——冒泡排序、直接插入排序、希爾排序(BubbleSOrt,InsertSort,ShellSort)

歡迎來到繁星的CSDN&#xff0c;本期的內容主要包括冒泡排序(BubbleSort&#xff09;&#xff0c;直接插入排序(InsertSort)&#xff0c;以及插入排序進階版希爾排序&#xff08;ShellSort&#xff09;。 廢話不多說&#xff0c;直接上正題&#xff01; 一、冒泡排序 冒泡排序…

制作微信商城的步驟是什么

在當今這個數字化時代&#xff0c;微信已成為人們日常生活中不可或缺的一部分。隨著微信生態的日益完善&#xff0c;微信商城成為了眾多企業和商家拓展線上業務、觸達潛在客戶的重要渠道。那么&#xff0c;如何制作一個高效、專業的微信商城呢&#xff1f;本文將為您詳細解析制…

做突破交易時,需要注意的進場細節有哪些?

突破交易揭示了市場未來的走向。 在這種情況下&#xff0c;面對市場時我們應該如何入場操作呢&#xff1f;接下來&#xff0c;讓我們來細化一下實施的具體步驟。 01. 在交易中&#xff0c;周期的考量比價格突破更為關鍵。 當價格突破發生時&#xff0c;市場的平靜被打破&#x…

生物素化的曼陀羅凝集素;Datura Stramonium Lectin

一、基本信息 中文名稱&#xff1a;生物素化的曼陀羅凝集素 英文名稱&#xff1a;Datura Stramonium Lectin (Biotinylated) 常用名&#xff1a;曼陀羅凝集素&#xff0c;生物素化 CAS號&#xff1a;N/A&#xff08;因不同制造商和產品而異&#xff0c;且可能未公開&#xff09…

MySQL黑馬教學對應視屏筆記分享之聚合函數,以及排序語句的講解筆記

聚合函數 注意&#xff1a;null值不參與聚合函數的計算。 分組查詢 2.where與having的區別 執行時機不同&#xff1a;where是在分組之前進行過濾&#xff0c;不滿足where條件&#xff0c;不參與分組&#xff1b;而having是分組之后對結果進行過濾。判斷條件不同&#xff1a;w…

【區塊鏈 + 智慧政務】一體化政務數據底座平臺 | FISCO BCOS應用案例

為進一步貫徹落實《全國一體化政務大數據體系建設方案》、《中共中央國務院關于構建數據基礎制度更好發揮 數據要素作用的意見》精神&#xff0c;一體化政務數據底座平臺結合相應城市的數字經濟現狀基礎、當前任務及未來發展 戰略&#xff0c;規劃建設數據底座&#xff0c;持續…

新品牌快速成長指南:揭秘品牌成功的黃金法則

打造一個新品牌是一個系統性工程&#xff0c;不是一兩句話就能說清楚的。 作為一個13年的營銷人&#xff0c;今天試圖給大家以最簡練和通俗的文字&#xff0c;詳細講講打造一個全新的品牌都需要做些啥&#xff1f;碼字不易&#xff0c;請多給點支持哦。 一、市場調研與定位&a…