Elasticsearch查询调整:处理可选参数type的匹配逻辑
解决Elasticsearch中type参数可选的查询问题
要实现type参数的可选逻辑,核心是动态构建bool查询的must条件数组:当type参数存在时,保留原有的两个匹配条件;当type不存在时,只保留cookie.id的匹配条件。
修改后的代码如下:
export const searchCookies: HttpFunction = enrichCloudFunction(async (req, res) => { const { query: { type, cookies, from, size }, } = validateCookieQuery(req) // 初始化基础查询条件:匹配cookie.id const mustConditions = [ { match: { 'cookie.id': cookies }, }, ] // 如果type存在,添加type匹配条件 if (type) { mustConditions.push({ match: { type }, }) } const { hits: { hits }, } = await elastic.search<ExtendedStuff>({ from: from || 0, index: cookieIndex({ prefix: config.prefix }), query: { bool: { must: mustConditions, // 使用动态构建的条件数组 }, }, size: size || 20, }) res.json(hits.map((x) => x._source)) })
关键说明:
- 动态条件数组:先创建只包含
cookie.id匹配的基础数组,再根据type是否存在决定是否添加type的匹配条件,直接实现参数可选的逻辑。 - 枚举类型影响:因为type是枚举类型,只要传入的type值在枚举范围内,Elasticsearch的match查询就能正常匹配;如果传入非法值,查询会自动返回空结果,符合预期。
- 变量名修正:原代码中
match: { 'cookie.id': cookie }里的cookie是笔误,应该和解构出来的变量名cookies保持一致,否则会触发变量未定义错误。
内容的提问来源于stack exchange,提问作者Jonas Gerling
相关产品推荐
相关产品推荐

