当前位置: 首页 > news >正文

【Elasticsearch】查询规则_query_rules

1.Query Rules 的定义与作用

Query Rules 是 Elasticsearch 提供的一种功能,允许用户根据预定义的规则动态调整搜索结果。它通过匹配查询的元数据(如用户输入、地理位置、用户兴趣等),对搜索结果进行定制化调整,例如固定某些文档到结果顶部或排除某些文档。

2.Query Rules 的核心组成部分

(1)规则类型(Rule Type)

• `pinned`:将指定文档固定到搜索结果的顶部。例如,在电商场景中,可以将热门商品固定到搜索结果顶部,提高其曝光率。

• `exclude`:从搜索结果中排除指定文档。例如,可以排除过时的新闻或不再销售的商品。

(2)匹配条件(Criteria)

匹配条件用于定义规则触发的条件,支持多种匹配类型,如:

• `exact`:精确匹配,要求完全一致。

• `fuzzy`:模糊匹配,允许一定程度的误差。

• `contains`:包含匹配,检查字段中是否包含指定内容。

(3)动作(Actions)

动作是指当规则匹配时要执行的操作,例如:

• 固定特定的文档`_id`。

• 排除某些文档。

3.在搜索请求中应用 Query Rules 的案例

案例 1:推广特定内容

假设我们需要在用户搜索“智能手机”时,将某些热门商品固定到搜索结果顶部。

定义规则集:

```json

PUT _query_rules/promotion-ruleset

{

  "rules": [

    {

      "rule_id": "promote-specific-products",

      "type": "pinned",

      "criteria": [

        {

          "type": "exact",

          "metadata": "query_string",

          "values": ["智能手机"]

        }

      ],

      "actions": {

        "ids": ["product-123", "product-456"]

      }

    }

  ]

}

```

• `rule_id`:规则的唯一标识。

• `type`:规则类型为`pinned`,表示将指定文档固定到顶部。

• `criteria`:当用户搜索“智能手机”时触发规则。

• `actions`:将文档`product-123`和`product-456`固定到搜索结果顶部。

应用规则的搜索请求:

```json

GET my-index/_search

{

  "retriever": {

    "rule": {

      "retriever": {

        "standard": {

          "query": {

            "query_string": {

              "query": "智能手机"

            }

          }

        }

      },

      "match_criteria": {

        "query_string": "智能手机"

      },

      "ruleset_ids": ["promotion-ruleset"]

    }

  }

}

```

• `ruleset_ids`:指定应用的规则集为`promotion-ruleset`。

这个查询请求是一个 Elasticsearch 的搜索请求,它结合了 Query Rules 功能,用于在搜索时动态应用预定义的规则集(如固定某些文档到搜索结果顶部)。以下是对这个请求的详细解释:

---

1.请求路径

`GET my-index/_search`

• `my-index`:这是目标索引的名称,表示查询将在这个索引中执行。

• `_search`:这是 Elasticsearch 的搜索接口,用于执行查询操作

---

2.请求体的结构

请求体中使用了`retriever`和嵌套的`rule`部分,这是 Query Rules 功能的核心结构。

(1)`retriever`部分

`retriever`是一个检索器,用于定义查询的基本逻辑。它在这里的作用是将标准查询(`standard`)与规则(`rule`)结合起来。

(2)`rule`部分

`rule`是 Query Rules 的核心,用于定义如何应用规则集。

---

3.具体字段解释

(1)`retriever.standard.query`

这部分定义了标准的查询逻辑,即用户实际输入的搜索条件:

```json

"retriever": {

  "standard": {

    "query": {

      "query_string": {

        "query": "智能手机"

      }

    }

  }

}

```

• `query_string`:这是一个查询类型,表示使用字符串查询。

• `query: "智能手机"`:这是用户输入的搜索关键词,表示查询包含“智能手机”的文档。

---

(2)`match_criteria`

`match_criteria`定义了规则触发的条件:

```json

"match_criteria": {

  "query_string": "智能手机"

}

```

• `query_string`:表示匹配条件基于查询字符串。

• `"智能手机"`:这是触发规则的关键词。当用户搜索“智能手机”时,规则会被触发。

注意:`match_criteria`中的关键词需要与规则集中定义的触发条件一致,否则规则不会生效。

---

(3)`ruleset_ids`

`ruleset_ids`指定了要应用的规则集:

```json

"ruleset_ids": ["promotion-ruleset"]

```

• `promotion-ruleset`:这是规则集的名称,表示应用之前定义的`promotion-ruleset`规则集。

在前面的案例中,`promotion-ruleset`规则集定义了将某些文档(如`product-123`和`product-456`)固定到搜索结果顶部的规则。

---

4.整体逻辑

这个查询请求的作用是:

1. 用户搜索关键词“智能手机”。

2. Elasticsearch 会根据标准查询逻辑检索包含“智能手机”的文档。

3. 同时,Query Rules 会检查规则集`promotion-ruleset`。

4. 如果规则集中的触发条件(`match_criteria`)匹配用户输入(“智能手机”),则执行规则集中的动作(如将某些文档固定到顶部)。

5. 最终返回的搜索结果会结合规则集的动作,例如将`product-123`和`product-456`固定到搜索结果顶部。

---

5.示例结果

假设索引中有以下文档:

```json

[

  {"_id": "product-123", "title": "热门智能手机 A"},

  {"_id": "product-456", "title": "热门智能手机 B"},

  {"_id": "product-789", "title": "普通智能手机 C"}

]

```

执行上述查询后,搜索结果可能如下:

1. 热门智能手机 A(`product-123`,被规则固定到顶部)

2. 热门智能手机 B(`product-456`,被规则固定到顶部)

3. 普通智能手机 C(`product-789`,正常检索结果)

---

总结

这个查询请求通过结合标准查询和 Query Rules 功能,实现了在用户搜索时动态调整搜索结果的顺序。它将某些文档固定到顶部,从而满足业务需求(如推广热门商品)。

案例 2:排除不相关内容

假设我们需要在用户搜索“新闻”时,排除某些过时的新闻内容。

定义规则集:

```json

PUT _query_rules/exclude-ruleset

{

  "rules": [

    {

      "rule_id": "exclude-old-news",

      "type": "exclude",

      "criteria": [

        {

          "type": "exact",

          "metadata": "query_string",

          "values": ["旧闻"]

        }

      ],

      "actions": {

        "ids": ["news-789"]

      }

    }

  ]

}

```

• `type`:规则类型为`exclude`,表示从搜索结果中排除指定文档。

• `criteria`:当用户搜索“旧闻”时触发规则。

• `actions`:排除文档`news-789`。

应用规则的搜索请求:

```json

GET my-index/_search

{

  "retriever": {

    "rule": {

      "retriever": {

        "standard": {

          "query": {

            "query_string": {

              "query": "新闻"

            }

          }

        }

      },

      "match_criteria": {

        "query_string": "新闻"

      },

      "ruleset_ids": ["exclude-ruleset"]

    }

  }

}

```

• `ruleset_ids`:指定应用的规则集为`exclude-ruleset`。

4.Query Rules 的性能优化

(1)简化规则逻辑

尽量减少规则的数量和复杂性,避免过多的模糊匹配或复杂的条件组合。过多的规则会增加查询的计算开销,降低性能。

(2)合理设置 JVM 参数

通过调整 Elasticsearch 的 JVM 参数(如堆内存大小)来优化整体性能。例如,合理设置堆内存大小可以避免频繁的垃圾回收(GC),从而提高系统性能。

(3)启用查询缓存

对于频繁使用的查询,启用查询缓存可以减少重复查询的开销,提升查询性能。

5.Query Rules 的监控与评估

(1)查询规则测试器 API

使用 Query Rules 测试器 API 验证规则是否按预期工作。

```json

POST _query_rules/my-ruleset/_test

{

  "match_criteria": {

    "match": "exclude"

  }

}

```

(2)查询执行计划分析

通过启用查询执行计划分析(`profile`参数),可以分析查询的性能瓶颈。

```json

{

  "query": {

    "match": {

      "field": "value"

    }

  },

  "profile": true

}

```

通过以上案例和参数详解,可以更好地在 Elasticsearch 中使用 Query Rules 功能来动态调整搜索结果,同时结合性能优化和监控手段,确保系统的高效运行。

相关文章:

【Elasticsearch】查询规则_query_rules

1.Query Rules 的定义与作用 Query Rules 是 Elasticsearch 提供的一种功能,允许用户根据预定义的规则动态调整搜索结果。它通过匹配查询的元数据(如用户输入、地理位置、用户兴趣等),对搜索结果进行定制化调整,例如固…...

Git备忘录(三)

设置用户信息: git config --global user.name “itcast” git config --global user.email “ helloitcast.cn” 查看配置信息 git config --global user.name git config --global user.email $ git init $ git remote add origin gitgitee.com:XXX/avas.git $ git pull or…...

用户的声音 | 文档结构化信息提取方案测评:LLM、开源模型部署与云端API,谁是合适选择?

文档预处理之文本化 近日,我们收到来自专业用户的使用心得,浅析结构化信息提取技术、技术选型及一些个人测试。 结构化信息提取的重要性 数据作为大模型时代的核心生产资料,其结构化处理能力直接影响AI系统的实用价值。尽管知识图谱、RAG等…...

vite调试node_modules下面插件

在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK,需要调试去判断问题时,或者研究第三方源码时后; vite默认是走缓存的,所以当修改后不会看到你打印的日志,这个时候有几种方法可以选择; 方式…...

ES12 weakRefs的用法和使用场景

ES12 (ECMAScript 2021) 特性总结:WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性,用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象,即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…...

【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)

文章目录 1. 语法1.1 使用 {} 定义1.2 使用 set() 定义 2. 特点3. 常用操作3.1 访问元素3.2 查找数据3.3 添加元素3.3.1 add() 方法3.3.2 update()方法 3.4 删除元素3.4.1 remove()方法3.4.2 discard()方法3.4.3 pop()方法3.4.4 clear()方法 3.5 集合运算3.5.1 并集&#xff1a…...

网络安全大数据架构 网络安全之数据安全

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全和数据安全 从狭义来说,网络安全指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或恶意的原因遭到破坏、更改、泄露&…...

(前端基础)CSS(一)

了解 Cascading Style Sheet:层叠级联样式表 CSS:表现层(美化网页)如:字体、颜色、边框、高度、宽度、背景图片、网页定位、网页浮动 css优势: 内容和表现分离网页结构表现统一,可以实现复用…...

Redis数据类型全景解析:从底层编码到应用反模式

一、核心数据类型矩阵 1.1 基础类型对比表 类型底层结构最大容量时间复杂度典型场景StringSDS/Embstr/Raw512MBO(1)读写缓存/计数器ListQuickList(ziplist)2^32-1元素头尾操作O(1)消息队列Hashziplist/hashtable2^32-1键值对O(1)平均对象存储Setintset/hashtable2^32-1成员O(…...

(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解

题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…...

TypeScript跟js,es6这些的区别

TypeScript 一、TypeScript 是什么 想象 JavaScript 是一个自由奔放的艺术家,它在创作(编写代码)时不受太多约束,非常灵活,但有时也容易犯错且难以调试。而 TypeScript 就像是给这位艺术家配备了一套精确的工具和规范…...

flink-cdc同步数据到doris中

1 创建数据库和表 1.1 数据库脚本 这样直接创建数据库是有问题,因为后面发现superset连接使用doris://root:12345610.101.12.82:9030/internal.eayc?charsetutf8mb4 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 f…...

Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析

引言 在云原生时代,Kubernetes 已经成为容器编排的事实标准。AWS EKS (Elastic Kubernetes Service) 作为一项完全托管的 Kubernetes 服务,简化了在 AWS 上运行 Kubernetes 的复杂性。Istio 作为服务网格领域的佼佼者,为微服务提供了流量管理…...

Golang教程

1. go 环境与命令 1.1 go 环境搭建 SDK 安装 Go 官网:golang.orgGo 中文社区:https://studygolang.com/dlGo API文档:https/golang.org 或 https://studygolang.com/pkgdoc 目录 api :api 存放bin:go命令src&#…...

AI 百炼成神:线性回归,预测房价

我们开始第一个项目——线性回归:预测房价。这是一个经典的机器学习入门项目,可以帮助你理解如何使用线性回归模型来预测连续的数值。 第一个项目:线性回归预测房价 项目目标 学习线性回归的基本概念。使用历史房价数据建立一个预测模型。理解如何评估模型的性能。项目步骤…...

企业软件合规性管理:构建高效、安全的软件资产生态

引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...

每日一题——编辑距离

编辑距离 参考资料题目描述示例 解题思路动态规划(DP)方法 代码实现复杂度分析示例详解示例1:"nowcoder" → "new"示例2:"intention" → "execution" 总结与心得 参考资料 建议先参考下…...

TensorFlow项目GPU运行 安装步骤

以下是在 Linux 系统 下搭建完整 GPU 加速环境的详细流程(适配 CUDA 11.2 和 Python 3.9): 1. 前置检查 1.1 验证 NVIDIA 驱动 # 检查驱动版本(需 ≥ 450.80.02) nvidia-smi 输出示例: CUDA Version: 11.2…...

c++进阶———继承

1.引言 在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话…...

FreeSwitch的mod_translate模块详细,附带场景案例及代码示例

mod_translate 模块详细介绍 mod_translate 是 FreeSWITCH 中的一个拨号计划应用程序模块,用于对电话号码或字符串进行格式转换和翻译。它可以根据预定义的规则对输入的内容进行匹配和转换,常用于号码格式化、路由选择、号码屏蔽等场景。 主要功能 号码…...

克隆 ESXi 虚拟机报错 Invalid configuration for device ‘0‘ 完整修复与避坑指南

本文针对 ESXi/vCenter 环境中克隆虚拟机后高频出现的 “Invalid configuration for device 0” 报错,拆解报错的核心根源 —— 克隆后残留的无效虚拟光驱、软驱空设备,提供图形化界面一键修复、命令行应急修复两套完整实操方案,补充批量处理…...

技术日报|免费Claude Code工具连冠再揽4007星总量破万,build-your-own-x逼近50万星上榜

🌟 TrendForge 每日精选 - 发现最具潜力的开源项目 📊 今日共收录 13 个热门项目🌐 智能中文翻译版 - 项目描述已自动翻译,便于理解🏆 今日最热项目 Top 10 🥇 Alishahryar1/free-claude-code 项目简介: 在…...

Manus外资收购被叫停:从全球化野心到监管困境,AI创业路在何方?

一个本土创业者的全球化之路 Manus母公司蝴蝶效应的武汉总部,与创始人肖弘母校华中科技大学仅隔一条马路。很长时间里,AI圈提到肖弘常与武汉联系在一起。2024年底,尚未走红的肖弘在圈内已小有名气,不少AI应用创业者推崇他的经营逻…...

数据治理“路线分化”:2026平台选型深度解析

2026年,中国企业的数字化转型正进入“向数据要价值”的攻坚阶段。前些年企业纷纷搭建数据中台、汇聚全域数据,然而当基础设施逐步完善,一个尴尬的现实却浮出水面——平台建好了,数据接入了,但数据标准不统一、指标口径…...

告别预编译包:手把手教你为你的Qt项目定制编译Windows静态库(Qt5.15/6.5 + CMake实战)

从零构建Qt静态库:为商业项目打造极致精简的Windows部署方案 当你的Qt应用程序需要交付给客户时,几十MB的DLL依赖文件往往成为部署的噩梦。想象一下,一个简单的工具软件因为QtCore、QtGui等动态库的拖累,安装包膨胀到上百MB——这…...

ICode竞赛Python 5级通关秘籍:用函数让Dev和Spaceship动起来(附完整代码解析)

ICode竞赛Python 5级通关秘籍:用函数让Dev和Spaceship动起来(附完整代码解析) 在ICode竞赛的虚拟训练场里,Python 5级关卡就像一座等待征服的编程城堡。当你看到Dev和Spaceship这两个角色在屏幕上笨拙地重复相同动作时&#xff0c…...

AI自动生成代码文档:从LLM原理到工程实践

1. 项目概述:当AI遇见文档生成如果你是一名开发者,或者经常需要和代码、API、配置文件打交道,那么“写文档”这件事,大概率是你的痛点之一。代码写完了,功能跑通了,但面对空白的README.md或者API文档页面&a…...

LoRA技术在AI视频生成中的应用与优化

1. 项目概述"Wan 2.1 Squish LoRA Video Tutorial"这个标题乍看简单,但包含了几个关键信息点。作为一名在AI生成内容领域摸爬滚打多年的从业者,我一眼就看出这是关于LoRA模型在视频生成中的应用教程。具体来说,Wan 2.1应该是某个特…...

省钱又解压!24小时自助洗车,解锁车主休闲新方式!

谁说洗车只能是一项枯燥的家务?如今,越来越多车主爱上24小时自助洗车,不仅是因为它便捷实 惠,更因为它成为了当下热门的低成本解压方式,让洗车从单纯的清洁任务,变成了放松身心的休闲时光。 当代年轻人生活…...

星动纪元宣布融资2亿美元:顺丰领投 红杉IDG加持

雷递网 乐天 4月27日星动纪元今日宣布融资超过2亿美元,本轮融资由顺丰集团领投;红杉中国、IDG资本、中金资本、京铭资本、朝希资本、鲁信创投、聚合资本、隆启投资等财务机构联合注资;科捷智能、东风产投、工银资本、联通旗下基金等多家头部产…...