【Elasticsearch】查询规则_query_rules

打印 上一主题 下一主题

主题 1057|帖子 1057|积分 3171

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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 功能来动态调解搜刮效果,同时结合性能优化和监控手段,确保系统的高效运行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表