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

这篇具有很好参考价值的文章主要介绍了Elasticsearch 8.10 中引入查询规则 - query rules。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:Kathleen DeRusso

Elasticsearch 8.10 中引入查询规则 - query rules,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索

我们很高兴宣布 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. 该图显示了生命周期:

Elasticsearch 8.10 中引入查询规则 - query rules,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索

例子

一家全球电子商务网站想要推广其新型无线充电器 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文章来源地址https://www.toymoban.com/news/detail-716637.html

到了这里,关于Elasticsearch 8.10 中引入查询规则 - query rules的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Elasticsearch复合查询之Boosting Query

    Elasticsearch复合查询之Boosting Query

    前言 ES 里面有 5 种复合查询,分别是: Boolean Query Boosting Query Constant Score Query Disjunction Max Query Function Score Query Boolean Query在之前已经介绍过了,今天来看一下 Boosting Query 用法,其实也非常简单,总结起来就一句话,对不期待的查询进行相关性降分。 Boost 加权机制底层

    2024年02月12日
    浏览(8)
  • ElasticSearch级查询Query DSL上

    ElasticSearch级查询Query DSL上

    目录 ES高级查询Query DSL match_all 返回源数据_source 返回指定条数size 分页查询fromsize 指定字段排序sort 术语级别查询 Term query术语查询 Terms Query多术语查询 exists query ids query range query范围查询 prefix query前缀查询 wildcard query通配符查询 fuzzy query模糊查询        ES中提供了一种强大

    2024年02月20日
    浏览(16)
  • Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string)

    Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string)

    ES中常用的查询类型往大了分可以分为简单查询,复合查询,聚合查询等; 而复合查询及聚合查询都是基于简单查询的;简单查询里面对条件的匹配方式又分为不同类型。term[s],match,match_all,match_phrase 等等 term 单词查询,在字段的倒排索引(发生分词)或者直接在字段值(

    2024年02月09日
    浏览(12)
  • Elasticsearch 查询之Function Score Query

    Elasticsearch 查询之Function Score Query

    前言 ES 的主查询评分模式分为两种,是信息检索领域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分(relevance scoring)算法。在此之前,Elasticsearch 使用的是 TF-IDF 算法作为默认的文档评分算法。从版本 5.0 起,BM25 算法取代

    2024年02月12日
    浏览(14)
  • ElasticSearch 高级查询语法Query DSL实战

    ElasticSearch 高级查询语法Query DSL实战

    ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language 领域专用语言) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 官方文档:https://www.elastic.co/guide/en/elasti

    2024年02月07日
    浏览(12)
  • 【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL

    【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL

    ElasticSearch系列整体栏目 内容 链接地址 【一】ElasticSearch下载和安装 https://zhenghuisheng.blog.csdn.net/article/details/129260827 【二】ElasticSearch概念和基本操作 https://blog.csdn.net/zhenghuishengq/article/details/134121631 【二】ElasticSearch的高级查询Query DSL https://blog.csdn.net/zhenghuishengq/article/details/1

    2024年02月06日
    浏览(15)
  • Elasticsearch:使用 query_string 查询的短语及模糊查询

    在我之前的文章系列里,我详细描述了 query_string 的一些功能: Elasticsearch: query_string 查询 Elasticsearch:以更简单的方式编写具有逻辑条件的 Elasticsearch 查询 - query_string Elasticsearch:理解 query_string 和 simple_query_string 查询 在今天的文章中,我们来聊聊 query_string 中的一下特殊查询

    2024年02月09日
    浏览(10)
  • 2.ElasticSearch 高级查询语法Query DSL实战

    2.ElasticSearch 高级查询语法Query DSL实战

    ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL (Domain Specified Language 领域专用语言 ) , Query DSL是利用Rest API传递JSON格式的请求体(RequestBody)数据与ES进行交互,这种方式的丰富查询语法让ES检索变得更强大,更简洁。 Query DSL | Elasticsearch Guide [7.17] | Elastic 语法

    2024年03月15日
    浏览(13)
  • Elasticsearch:理解 query_string 和 simple_query_string 查询

    Elasticsearch:理解 query_string 和 simple_query_string 查询

    针对很多的开发者来说,如果你不是很熟悉 DSL 查询,那么在有些情况下,query_string 及 simple_query_string 变得非常灵活及方便。在今天的文章中,我来比较一下这两种查询的方法。 我们先使用 _bulk 命令创建如下的一个索引: 此查询使用语法根据运算符(例如 AND 或 NOT)解析和

    2023年04月10日
    浏览(6)
  • 15.Elasticsearch 7.15 Query DSL 之 Wildcard查询、Regexp查询

    返回包含与通配符模式匹配的文档。 以下搜索返回 user.id 字段包含以 ki 开头并以 y 结尾的文档。这些匹配项可以包括 kiy、kity 或 kimchy (必填, 对象) 你想查询的字段 参数名 描述 boost (Optional, float) 用于降低或提高查询相关性得分的浮点数。默认为1.0。 rewrite (可选,字符串)

    2023年04月08日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包