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

2023-09-15 20:17:53

作者: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.00,
  "currency": "USD",
  "plug_type": "B",
  "voltage": "120v"
}

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.00,
  "currency": "GBP",
  "plug_type": "G",
  "voltage": "230V"
}

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.00,
  "currency": "EUR",
  "plug_type": "C",
  "voltage": "230V"
}

使用以下查询在该索引中搜索无线充电器(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": "my_query",
          "values": ["wireless charger"]
        },
        {
          "type": "exact",
          "metadata": "country",
          "values": ["us"]
        }
      ],
      "actions": {
        "ids": [
          "us1"
        ]
      }
    },
    {
      "rule_id": "uk-charger",
      "type": "pinned",
      "criteria": [
        {
          "type": "contains",
          "metadata": "my_query",
          "values": ["wireless charger"]
        },
        {
          "type": "exact",
          "metadata": "country",
          "values": ["uk"]
        }
      ],
      "actions": {
        "ids": [
          "uk1"
        ]
      }
    }
  ]
}

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

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

只有在上面的两个规则同时满足的情况下,才算是一个匹配,并且结果会被 pinned 到最前面。

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

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

搜索查询规则

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

POST /products/_search=**.hits
{
  "query": {
    "rule_query": {
      "organic": {
        "multi_match": {
          "query": "reliable wireless charger for iPhone",
          "fields": [
            "name^5",
            "description"
          ]
        }
      },
      "match_criteria": {
        "my_query": "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": "description",
          "values": ["wireless charger"]
        },
        {
          "type": "exact",
          "metadata": "country",
          "values": ["us"]
        }
      ],
      "actions": {
        "ids": [
          "us1"
        ]
      }
    }

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

      "match_criteria": {
        "my_query": "reliable wireless charger for iPhone",
        "country": "us"
      },

中定义的规则很显然匹配在 promotion-rules 中定义的第一个规则:my_query 中含有 "wireless charger", 而 country 和 us 完全匹配。这样第一个规则就被匹配,那么 action 中定义的 id 为 us1 的会 pinned 到搜索结果的最前面。

在执行查询之前,它被重写为固定查询 (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

更多推荐

2022年统计用区划代码表SQL 01

行政区划代码为国家公布的六位县级以上行政区划代码行政区编码的用途:APP里做城市级联选择根据身份证前六位获取用户所在城市区县370786昌邑市370800济宁市370811任城区370812兖州区百度高德等接口通常都会返回adcode字段(行政区编码)根据行政区编码可以查询天气数据例如请求天气API接口,传参adcod

2、Window上的 虚拟机端口 暴露到 宿主机局域网教程

今天在公司的服务器主机上捣鼓虚拟机,要在虚拟机上安装一个oracle,虚拟机和主机能互相ping通的前提下,要将虚拟机上的端口号暴露在主机上,让项目组内的所有员工的电脑都能访问到该oracle数据库。也就是电脑A访问主机,虚拟机将oracle端口映射到主机上,这样电脑A便能通过主机上的ip映射访问到虚拟机上的oracl

windows安装linux部署docker服务全过程

windows安装linuxhttps://blog.csdn.net/laterstage/article/details/131460688如果不能查看linuxip信息,需要安装:yuminstallnet-tools.x86_64-ylinux安装Docker随着容器技术的兴起,Docker已经成为了最为流行的

Easyui里的datagrid嵌入select下拉框

问题:想使用datagird里嵌入select下拉框,并在提交form表单时获取datagrid选中的每行数据里的每个下拉框选中的值。解决方案:其中economicIssuesSelect使用下拉框,重点关注initEconomicIssues(row)方法。这里的方法需要传递row$('#queryPcpTable'

图论第三天|130. 被围绕的区域、417. 太平洋大西洋水流问题、827. 最大人工岛

130.被围绕的区域文档讲解:代码随想录-130.被围绕的区域状态:开始学习。思路:步骤一:深搜或者广搜将地图周边的‘O’全部改成’A’,如图所示:步骤二:再遍历地图,将‘O’全部改成‘X’(地图中间的‘O’改成了‘X’),将‘A’改回‘O’(保留的地图周边的‘O’),如图所示:本题代码(dfs):classSolut

Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅

一、项目概述欢迎来到创意之源!我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界。通过使用AndroidStudio,我们实现了绘制贝塞尔曲线的功能,让你能够轻松创作出令人惊叹的艺术作品。不论你是热爱绘画的大学生还是渴望学习的艺术爱好者,这个应用程序将为你点燃创作的激情,让你沉浸在绘画的乐趣中。二、主要技

vue+axios+el-progress(elementUI组件)实现下载进度条实时监听(小白简洁版)

一、实现效果二、实现方式方案:使用axios方法onDownloadProgress方法监听下载进度使用此方式的前提!!!请让后端在响应头中加上content-length,存放下载文件的总大小,如下图:三、代码1、进度条页面代码如下:<Spinfixv-if="spinVisible"><Icontype="ios-

天翎知识管理系统:强大的权限管理功能,保障知识安全

编者按:知识管理系统的权限管理功能,可以帮助企业实现对知识库的精细化管理,保证知识库的安全性和稳定性。本文将介绍天翎知识管理系统的权限管理体系,通过权限管理,控制用户的编辑和审核权限,从而保证知识内容的准确性和质量。知识管理系统权限管理的重要性保护知识安全:通过权限管理,可以控制哪些用户可以访问、修改甚至删除特定的知识

汽车电子AEC Q101车规认证FDD9507L-F085 P沟道MOS管

深力科带你了解关于汽车电子AECQ101车规认证?是一种针对分立半导体的可靠性测试认证程序,由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等方面的测试要求。AECQ101是汽车电子领域的一个产品认证标准,它

第一次课(反馈,未讲评)

目标服务和目标进程是两个概念,在计算机领域中有着不同的含义和用法。目标服务(TargetService)指的是在分布式系统或网络中提供特定功能或服务的软件组件或模块。它通常以独立的方式运行,通过接收请求并提供相应的功能来满足服务需求。例如,Web服务器、数据库服务器、文件服务器等都可以被视为目标服务。目标进程(Targ

代码随想录训练营 DP

代码随想录训练营DP583.两个字符串的删除操作🌸代码72.编辑距离🌸代码今天整理的东西都放在注释里了583.两个字符串的删除操作🌸给定两个单词word1和word2,返回使得word1和word2相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。代码funcminDistance(w1string,w

热文推荐