nodejs实现es调研报告
1.配置文件
js
const esConfig = {
host: 'http://elastic:syzx123@10.0.30.30:9200',
index: "eal_data_",
connectionRequestTimeout: 300000,
// ES默认支持的浅查询最大分页限制
maxResultWindow: 9999
};
module.exports = esConfig;
2.方法
-
判断某索引是否存在
-
查询:超过9999进行深查询,否则进入浅查询
深查询时先使用match_phrase进行稍精准的匹配,取前五个数据与match的结果进行合并去重
js
var { Client } = require('@elastic/elasticsearch');
const esConfig = require('./es-config');
const client = new Client({
node: esConfig.host,
requestTimeout: esConfig.connectionRequestTimeout,
});
/**
* 判断某索引是否存在
* @param {*} index
* @returns
*/
async function isExists(index) {
let resp;
try {
resp = await client.indices.exists({
index: index
});
} catch (e) {
resp = null;
}
return resp;
}
/**
* 查询
* @param {*} index
* @param {*} corpName
* @param {*} from
* @param {*} size
* @param {*} id
* @returns
*/
async function search(index, corpName, from, size, id) {
from = from ?? 0;
size = size ?? 20;
let result = [];
try {
//超过9999 深查询
if (id && id > esConfig.maxResultWindow) {
let newResult = [];
// match_phrase查询出较为精准的结果 取前五 与match结果集去重
// 使用search_after时,from值必须设置为0或者-1
let matchPhrase = await client.search({
index: index,
body: {
query: {
match_phrase: {
corpName: corpName
}
}
},
from: 0,
size: 5,
search_after: [id],
sort: [{ id: "asc" }]
});
if (matchPhrase && matchPhrase.hits.hits) {
newResult = newResult.concat(matchPhrase.hits.hits)
}
let match = await client.search({
index: index,
body: {
query: {
match: {
corpName: corpName
}
}
},
from: 0,
size: size > 5 ? size - 5 : size,
search_after: [id],
sort: [{ id: "asc" }]
});
if (match && match.hits.hits) {
newResult = newResult.concat(match.hits.hits)
}
if (newResult && newResult.length > 0) {
result = [...new Set(newResult)];
}
} else {
//浅查询
let match = await client.search({
index: index,
body: {
query: {
match: {
corpName: corpName
}
}
},
from: from,
size: size,
});
result = match && match.hits.hits ? match.hits.hits : [];
}
} catch (e) {
return [];
}
return result;
}
(async function () {
let index = esConfig.index + '20221019';
let exist = await isExists(index);
console.log('exists: ', exist);
let result = await search(index, "沈阳一鸣", 0, 10, 10000);
console.log('查询结果为:-------------------------------');
console.log(result);
})();