Elasticsearch 8.10 中引入查询规则 - query rules

news2024/11/14 20:54:10

作者:Kathleen DeRusso

我们很高兴宣布 Elasticsearch 8.10 中的查询规则! 查询规则(query rules)允许你根据正在搜索的查询词或根据作为搜索查询的一部分提供的上下文信息来更改查询。

什么是查询规则?

查询规则(query rules)允许自定义搜索相关性之外的搜索结果,这可以根据您提供的上下文信息更好地控制目标查询的结果。 这为营销活动、个性化和特定细分市场的搜索结果提供了更有针对性的搜索结果,所有这些都内置于 Elasticsearch® 中!

支持哪些类型的规则?

首先,我们支持固定查询规则(pinned query rules),它允许你根据特定查询中的上下文来识别要在搜索结果顶部推广的文档。

使用固定查询规则,你可以:

  • 当人们搜索 iPhone 时,固定结果以预订最新的 iPhone
  • 当人们搜索 iPhone 时,固定推荐其他品牌的文章
  • 如果用户搜索 “football” 位于美国或英国,则固定不同的结果
  • 固定重要的组织公告,使其位于每个人搜索结果的顶部
  • 有关所有非经理员工即将进行的员工绩效评估的固定信息

…等等!

支持哪些类型的标准?

查询规则匹配条件可以是以下任意一种:

  • exact:精确匹配指定值
  • fuzzy:在允许的 Levenshtein 编辑距离内匹配指定值
  • prefix:以指定值开头
  • suffix:以指定值结尾
  • contains:包含指定值
  • lt:小于规定值
  • lte:小于或等于指定值
  • gt:大于指定值
  • gte:大于或等于指定值
  • always:始终匹配所有规则查询

支持哪些类型的操作?

对于固定查询规则,操作可以是固定与索引 _id 字段对应的 id,也可以是固定指定索引中相应 _id 字段的文档。

查询规则如何工作?

在底层,创建和使用查询规则的过程如下:

  1. 管理员创建包含一个或多个上下文查询规则的查询规则集。
  2. 使用 query rules management API,,我们将这些查询规则存储在 Elasticsearch 中。
  3. 搜索使用 rule_query,其中包括搜索查询以及查询规则集和匹配条件。
  4. Elasticsearch 识别规则集中与查询中指定的条件相匹配的所有规则。
  5. 每个匹配规则按照其在规则集中出现的顺序应用。
  6. 在查询重写阶段,该查询被重写为固定查询(pinned query),固定规则中标识的 ID 或文档。
  7. 新的固定查询运行并返回结果,匹配的升级结果位于顶部。
  8. 该图显示了生命周期:

例子

一家全球电子商务网站想要推广其新型无线充电器 PureJuice Pro。

该索引包括以下文档:

POST /products/_doc/us1
{
  "name": "PureJuice Pro",
  "description": "PureJuice Pro: Experience the pinnacle of wireless charging. Blending rapid charging tech with sleek design, it ensures your devices are powered swiftly and safely. The future of charging is here.",
  "price": 15,
  "currency": "USD",
  "plug_type": "B",
  "voltage": "120v",
  "country": "us"
}
  
POST /products/_doc/uk1
{
  "name": "PureJuice Pro - UK Compatible",
  "description": "PureJuice Pro: Redefining wireless charging. Seamlessly merging swift charging capabilities with a refined aesthetic, it guarantees your devices receive rapid and secure power. Welcome to the next generation of charging.",
  "price": 20,
  "currency": "GBP",
  "plug_type": "G",
  "voltage": "230V",
  "country": "uk"
}
  
POST /products/_doc/eu1
{
  "name": "PureJuice Pro - Wireless Charger suitable for European plugs",
  "description": "PureJuice Pro: Elevating wireless charging. Combining unparalleled charging speeds with elegant design, it promises both rapid and dependable energy for your devices. Embrace the future of wireless charging.",
  "price": 18,
  "currency": "EUR",
  "plug_type": "C",
  "voltage": "230V",
  "country": "euro"
}

使用以下查询在该索引中搜索无线充电器(wireless charger):

POST /products/_search?filter_path=**.hits
{
  "query": {
    "multi_match": {
      "query": "wireless charger",
      "fields": [ "name^5", "description" ]
    }
  }
}

由于 name 匹配,此查询将首先返回 European 充电器 - 但我们可能希望根据搜索者的位置推广不同的版本。

{
  "hits": {
    "hits": [
      {
        "_index": "products",
        "_id": "eu1",
        "_score": 7.590337,
        "_source": {
          "name": "PureJuice Pro - Wireless Charger suitable for European plugs",
          "description": "PureJuice Pro: Elevating wireless charging. Combining unparalleled charging speeds with elegant design, it promises both rapid and dependable energy for your devices. Embrace the future of wireless charging.",
          "price": 18,
          "currency": "EUR",
          "plug_type": "C",
          "voltage": "230V"
        }
      },
      {
        "_index": "products",
        "_id": "us1",
        "_score": 0.1323013,
        "_source": {
          "name": "PureJuice Pro",
          "description": "PureJuice Pro: Experience the pinnacle of wireless charging. Blending rapid charging tech with sleek design, it ensures your devices are powered swiftly and safely. The future of charging is here.",
          "price": 15,
          "currency": "USD",
          "plug_type": "B",
          "voltage": "120v"
        }
      },
      {
        "_index": "products",
        "_id": "uk1",
        "_score": 0.1323013,
        "_source": {
          "name": "PureJuice Pro - UK Compatible",
          "description": "PureJuice Pro: Redefining wireless charging. Seamlessly merging swift charging capabilities with a refined aesthetic, it guarantees your devices receive rapid and secure power. Welcome to the next generation of charging.",
          "price": 20,
          "currency": "GBP",
          "plug_type": "G",
          "voltage": "230V"
        }
      }
    ]
  }
}

管理查询规则

首先,具有 manage_search_query_rules 权限的管理员使用查询规则管理 API 定义并存储规则集。

PUT /_query_rules/promotion-rules
{
  "rules": [
    {
      "rule_id": "us-charger",
      "type": "pinned",
      "criteria": [
        {
          "type": "contains",
          "metadata": "description",
          "values": [
            "wireless charger"
          ]
        },
        {
          "type": "exact",
          "metadata": "country",
          "values": [
            "us"
          ]
        }
      ],
      "actions": {
        "ids": [
          "us1"
        ]
      }
    },
    {
      "rule_id": "uk-charger",
      "type": "pinned",
      "criteria": [
        {
          "type": "contains",
          "metadata": "description",
          "values": [
            "wireless charger"
          ]
        },
        {
          "type": "exact",
          "metadata": "country",
          "values": [
            "uk"
          ]
        }
      ],
      "actions": {
        "ids": [
          "uk1"
        ]
      }
    }
  ]
}

在此规则集中,我们定义了两个规则:

  • 如果用户的搜索词包含短语 “wireless charger” 并且它们位于美国 (us),我们希望将美国产品固定在结果集的顶部。
  • 如果用户执行相同的搜索但位于英国 (uk),我们希望将该产品的英国版本固定在结果集的顶部。

提示:因为我们正在将其转换为底层的固定查询,所以我们需要遵守一些基本规则:

  • 我们可以定义要固定的 id 或文档 (docs),但不能同时定义两者。 为了避免混乱,最佳实践是选择其中之一并在查询规则集中保持一致。
  • 固定查询(pinned query)最多只能支持 100 个固定文档。 任何给定的规则都会强制执行此限制。

搜索查询规则

当我们根据查询规则进行搜索时,我们想要使用 rule_query。 规则查询示例可能如下所示:

POST /products/_search?filter_path=**.hits
{
  "query": {
    "rule_query": {
      "organic": {
        "multi_match": {
          "query": "reliable wireless charger for iPhone",
          "fields": [
            "name^5",
            "description"
          ]
        }
      },
      "match_criteria": {
        "description": "reliable wireless charger for iPhone",
        "country": "us"
      },
      "ruleset_id": "promotion-rules"
    }
  }
}

该查询由以下部分组成:

  • organic 查询,这是我们想要运行并对文档进行排名的搜索。 如果没有应用查询规则,则不做任何修改地执行该查询。
  • 匹配标准,定义了我们要匹配的标准。 在此示例中,我们有两条 match_criteria:
    • my_query,在本例中与用户在搜索框中输入的字符串相同
    • country,通过对用户 IP 地址使用地理定位来确定
  • ruleset ID,它确定我们在其中查找匹配规则的规则集。

我们验证每个规则以确定是否应将其应用于查询。 当我们处理规则查询时,我们找到来自 us 的查询 “wireless charger” 的匹配规则:

{
      "rule_id": "us-charger",
      "type": "pinned",
      "criteria": [
        {
          "type": "contains",
          "metadata": "my_query",
          "values": ["wireless charger"]
        },
        {
          "type": "exact",
          "metadata": "country",
          "values": ["us"]
        }
      ],
      "actions": {
        "ids": [
          "us1"
        ]
      }
    }

提醒一下,为了使查询规则匹配,查询规则中定义的所有条件都必须与规则查询输入匹配。

在执行查询之前,它被重写为固定查询 (pinned query):

{
  "query": {
    "pinned": {
      "organic": {
        "query_string": {
          "query": "reliable wireless charger for iPhone"
        }
      },
      "ids": [
        "us1"
      ]
    }
  }
}

Elasticsearch 使用这个新的固定查询进行搜索,并返回结果,其中固定的美国版本产品位于结果集的顶部。

上面查询的结果为:

{
  "hits": {
    "hits": [
      {
        "_index": "products",
        "_id": "us1",
        "_score": 1.7014122e+38,
        "_source": {
          "name": "PureJuice Pro",
          "description": "PureJuice Pro: Experience the pinnacle of wireless charging. Blending rapid charging tech with sleek design, it ensures your devices are powered swiftly and safely. The future of charging is here.",
          "price": 15,
          "currency": "USD",
          "plug_type": "B",
          "voltage": "120v",
          "country": "us"
        }
      },
      {
        "_index": "products",
        "_id": "eu1",
        "_score": 13.700377,
        "_source": {
          "name": "PureJuice Pro - Wireless Charger suitable for European plugs",
          "description": "PureJuice Pro: Elevating wireless charging. Combining unparalleled charging speeds with elegant design, it promises both rapid and dependable energy for your devices. Embrace the future of wireless charging.",
          "price": 18,
          "currency": "EUR",
          "plug_type": "C",
          "voltage": "230V",
          "country": "euro"
        }
      },
      {
        "_index": "products",
        "_id": "uk1",
        "_score": 0.104635,
        "_source": {
          "name": "PureJuice Pro - UK Compatible",
          "description": "PureJuice Pro: Redefining wireless charging. Seamlessly merging swift charging capabilities with a refined aesthetic, it guarantees your devices receive rapid and secure power. Welcome to the next generation of charging.",
          "price": 20,
          "currency": "GBP",
          "plug_type": "G",
          "voltage": "230V",
          "country": "uk"
        }
      }
    ]
  }
}

结论

我们向您展示了如何定义查询规则以根据用户输入的查询或个性化数据等上下文信息来推广结果,以及如何使用这些规则进行搜索。

请在 Elastic® 8.10发行说明中了解此功能及更多信息,并通过 14 天免费试用 Elastic Cloud自行尝试使用查询规则进行搜索。 我们很乐意在 GitHub 和我们的讨论论坛上收到你的来信。

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。功能可能无法按时交付或根本无法交付。

原文:Introduction to query rules in Elasticsearch | Elastic Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux MyFile

在之前,我们应该都多少接触过了C语言的文件管理,fopen,fclose,fputs....等函数的用法,也分析了系统层面上C语言是如何实现文件管理的。 回顾 上一个文章,我们讲解了十分重要的知识,在文件被打…

组合拳SSRF+redis未授权访问

目录 一、SSRF 二、redis未授权访问 三、组合利用 1.写入Webshell 2.反弹shell 一、SSRF 一台web服务器对其他服务器发起请求,以加载其他服务器的web内容或数据 但因请求参数没有进行严格过滤,攻击者可能会通过SSRF漏洞来访问敏感数据、执行未经授…

Deformable Convolution 可变形卷积

论文:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf 代码:https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py 参考博文:可变形卷…

【哈希加密算法】MD5和SHA-1基本介绍和使用!

一、哈希算法 哈希算法,根据碰撞概率,输出的长度越长,就越难产生碰撞,也就越安全。 常用的哈希算法如下: (1)哈希算法的用途 数据加密:哈希算法可以将原始数据转换成不可逆的加密字…

第二章:25+ Python 数据操作教程(第二十一节PIP连接错误:SSL 证书验证失败解决办法)

在公司网络中安装 python 包时最常见的问题是 SSL 证书验证失败。有时公司会屏蔽网络中的某些网站,因此员工无法访问这些网站。每当他们尝试访问这些网站时,都会显示“由于公司政策,访问被拒绝”。它会导致到达主要 python 网站时出现连接错误…

(面试经典刷题)挑战一周刷完150道-Python版本-第3天(40个题)-I(前10个题)

一、长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 可以是暴…

数据结构与算法(C语言版)P1---算法效率

算法的效率:算法的时间复杂度和空间复杂度 【本节目标】 1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习 1、算法效率 1.1、如何衡量一个算法是的好坏 如何衡量一个算法的好坏呢?比如斐波那契数列: long long Fib(…

面试官:我们深入聊聊Java虚拟机吧

哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 前言面试Java虚拟机内存模型垃圾收集器…

2023年CRM系统成功落地的5个标准

企业做CRM选型时都在思考投入产出比,花费上万元、甚至几十万元和几个月的时间购买和实施CRM,能否为公司带来降本增效的变革?CRM上线后,需要多长时间才能真切地看到效果?评估CRM的使用效果,需要每个企业制定…

【C++STL基础入门】queue基础使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么二、queue的基础使用2.1 queue的构造函数2.2 queue的属性函数 总结 前言 C标准模板库(STL)提供了一系列强大的容器和算法…

vi/vim编辑器

vi和vim区别 vi 和 vim 是常见的文本编辑器,以下是它们之间的区别: 功能和特性: vi 是最早的版本,是在早期Unix系统中广泛使用的编辑器。vi 相对较简单,功能主要集中在基本的文本编辑操作上,如插入、删除、…

MyBatis: 配置文件解析流程

XmlConfigurationBuilder类来解析配置文件。 调用了build方法,其代码如下: 其中通过parse方法返回一个Configuration对象,在传递给build方法。 parse方法代码如下: 其中调用了parseConfiguration方法, 可以看到其中…

hive 静态分区与动态分区(笔记)

目录 前言: 静态分区: 1.创建分区 2.删除分区 3.在分区中插入数据 4.查看分区表数据 动态分区 : 2.查看v表源数据 3.以emp_name为动态字段数据抽取到employee表 总结 前言: Hive中的分区就是把一张大表的数据按照业务需要…

华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装

文章目录 华为云云耀云服务器L实例评测|华为云上试用监控服务Prometheus一、监控服务Prometheus三件套介绍二、华为云主机准备三、Prometheus安装四、Grafana安装五、alertmanager安装六、三个服务的启停管理1. Prometheus、Alertmanager 和 Grafana 启动顺序2. 使用…

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击:ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__bizMzg2NDY3NjY5NA&mid2247490070&idx1&snebdc608acd419bb3e71ca46acee04890&chksmce64e42ff9136d39743d16059e2c9509cc799a7b15e8f4d4f71caa25968554…

UG时的弹出框:提示没有可用许可证,No such feature exists(-5),

当过多用户使用UG时或UG优化失效时会出现此弹出框。如果该问题发生时,需立即联系管理员,查看许可管理平台,该服务器许可是否占满,如果占满,联系武汉格发管理员,请准备好服务器远程,可以及时查看…

NLP(5)--自编码器

目录 一、自编码器 1、自编码器概述 2、降噪自编码器 二、特征分离 三、自编码器的其他应用 1、文本生成 2、图像压缩 3、异常检测 四、VAE 1、极大似然估计 2、GSM 3、GMM 4、VAE的引出 5、VAE 一、自编码器 1、自编码器概述 自编码器(Auto-Encode…

【高阶数据结构】AVL树(C++实现)

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C进阶 ⭐代码仓库:C进阶 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

如何将一个字符串转换为驼峰命名法(camel case)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

ODrive移植keil(三)—— USB虚拟串口和快速正弦余弦运算

目录 一、USB虚拟串口1.1、硬件连接1.2、代码移植1.3、测试1.4、最终代码 二、快速正弦余弦运算2.1、硬件连接2.2、代码移植2.3、测试2.4、结论 三、软件中断3.1、配置中断3.2、官方代码的使用方式 ODrive、VESC和SimpleFOC 教程链接汇总:请点击 一、USB虚拟串口 单…