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

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.2.1 多字段权重控制(标题、品牌、类目)

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • 电商商品搜索实战:多字段权重控制策略
    • 1. 业务场景与核心挑战
      • 1.1 典型搜索问题
      • 1.2 权重失衡的影响数据
    • 2. 权重控制核心方案
      • 2.1 字段权重分配矩阵
      • 2.2 多策略组合方案
    • 3. 高级权重控制技巧
      • 3.1 动态权重调整
      • 3.2 语义权重增强
    • 4. 效果验证与数据分析
      • 4.1 A/B测试结果对比
      • 4.2 `关键词匹配质量分析`
    • 5. 性能优化方案
      • 5.1 索引结构优化
      • 5.2 缓存策略优化
    • 6. 异常场景处理
      • 6.1 权重失效诊断
      • 6.2 权重漂移监控
    • 7. 最佳实践总结
      • 7.1 `黄金法则`
      • 7.2 避坑指南

电商商品搜索实战:多字段权重控制策略

1. 业务场景与核心挑战

在这里插入图片描述

1.1 典型搜索问题

  • 案例1:搜索"苹果手机"出现水果类商品
  • 案例2:"小米电视"优先展示配件而非主机
  • 案例3:品牌词"NIKE"被分词导致召回偏差

1.2 权重失衡的影响数据

问题类型点击率下降转化率下降用户跳出率上升
标题权重不足38%25%+45%
品牌识别错误52%41%+68%
类目匹配偏差27%19%+32%

2. 权重控制核心方案

2.1 字段权重分配矩阵

字段名称基础权重动态权重范围特殊场景策略
title108-15促销商品x1.5
brand85-12品牌专区x2.0
category64-8类目导航页x1.8
tags43-5新品标签x1.3
description21-3长尾词搜索x1.2

2.2 多策略组合方案

{"query": {"bool": {// should 子句表示其中的查询条件只要满足一个或多个即可,// Elasticsearch会为每个满足条件的文档计算分数,最后综合这些分数来对文档进行排序"should": [{"match": {"title": {// 查询的关键词,{{query}} 是一个占位符,实际使用时需要替换为具体的查询词"query": "{{query}}",// 该查询条件的权重,这里设置为 10,权重越高,满足此条件的文档在排序时越靠前"boost": 10,// 指定使用的分词器为 title_smartcn,分词器会将查询词和文档中的文本进行分词处理,以便进行匹配"analyzer": "title_smartcn"}}},{"term": {"brand": {// 查询的品牌值,{{brand}} 是占位符,需替换为具体的品牌名称"value": "{{brand}}",// 该查询条件的权重,设置为 8,满足此条件的文档会在排序中获得相应的加分"boost": 8}}},{"match": {"category_path": {// 查询的类目路径,{{category}} 是占位符,要替换为具体的类目路径"query": "{{category}}",// 该查询条件的权重,设置为 6"boost": 6,// operator 设置为 and,表示查询词必须全部出现在文档的 category_path 字段中才会匹配成功"operator": "and"}}}]}}
}

3. 高级权重控制技巧

3.1 动态权重调整

POST /products/_search
{"query": {"function_score": {"query": {"multi_match": {"query": "华为手机","fields": ["title^10", "brand^8", "category^6"]}},"functions": [{"filter": { "term": { "is_promotion": true }},"weight": 1.5},{"filter": { "term": { "in_stock": true }},"weight": 1.2}],"boost_mode": "multiply"}}
}

3.2 语义权重增强

{"query": {"multi_match": {// 要搜索的关键词,这里是 "夏季连衣裙",表示用户希望查找包含该关键词的文档"query": "夏季连衣裙",// 查询类型为 cross_fields// cross_fields 类型会将查询词在所有指定的字段中进行匹配,就好像这些字段是一个大的字段一样// 它会在各个字段中查找匹配项,并综合考虑各个字段的匹配情况来计算文档的相关性得分"type": "cross_fields",// 指定要在哪些字段上进行搜索,每个字段后面可以跟一个权重(用 ^ 符号指定)// 权重表示该字段在计算相关性得分时的重要程度,权重越高,该字段的匹配结果对最终得分的影响越大"fields": [// 标题字段,权重为 10,意味着该字段的匹配结果对最终得分的影响较大"title^10",// 分类字段,权重为 6"category^6",// 风格标签字段,权重为 5"style_tags^5",// 材质字段,权重为 3,影响相对较小"material^3"],// tie_breaker 参数用于处理多个字段匹配时的得分情况// 当一个文档在多个字段上都有匹配时,Elasticsearch 会计算每个字段的得分// tie_breaker 是一个介于 0 到 1 之间的数值,它会将非最高得分的字段的得分乘以该值后再与最高得分相加// 这里设置为 0.3,意味着非最高得分的字段的得分会乘以 0.3 后再参与最终得分的计算"tie_breaker": 0.3}}
}

4. 效果验证与数据分析

4.1 A/B测试结果对比

策略版本CTR转化率平均排名提升搜索耗时
基础权重12.3%3.8%-220ms
动态权重18.7%5.2%+3.2位245ms
语义增强版21.5%6.1%+4.8位260ms

4.2 关键词匹配质量分析

搜索词旧策略TOP1相关度新策略TOP1相关度提升幅度
苹果手机72%95%+23%
小米电视68%91%+23%
耐克运动鞋65%89%+24%
夏季真丝裙58%82%+24%

5. 性能优化方案

5.1 索引结构优化

// 该请求用于创建一个名为 "products" 的索引
PUT /products
{"mappings": {"properties": {"title": {// 指定字段类型为 text,适用于需要进行全文搜索的文本字段"type": "text",// 指定使用名为 "title_analyzer" 的分词器对该字段进行分词处理// 分词器会将文本拆分成一个个词项,便于后续的搜索和匹配操作"analyzer": "title_analyzer","fields": {// 在 "title" 字段下创建一个子字段 "keyword",类型为 "keyword"// "keyword" 类型适用于需要精确匹配的场景,如排序、聚合等"keyword": { "type": "keyword" }}},"brand": {// 指定字段类型为 text,可进行全文搜索"type": "text","fields": {// 在 "brand" 字段下创建一个子字段 "exact",类型为 "keyword"// 用于对品牌进行精确匹配,例如在筛选特定品牌的商品时会用到"exact": { "type": "keyword" }}}}},"settings": {"index": {"similarity": {// 定义一个名为 "custom_bm25" 的自定义相似度算法"custom_bm25": {// 指定相似度算法的类型为 BM25,BM25 是一种常用的文本相似度算法"type": "BM25",// "b" 是 BM25 算法中的一个参数,用于控制文档长度对相似度得分的影响// 取值范围通常在 0 到 1 之间,这里设置为 0.75"b": 0.75,// "k1" 也是 BM25 算法中的一个参数,用于控制词频对相似度得分的影响// 通常取值在 1.2 到 2.0 之间,这里设置为 1.2"k1": 1.2}}}}
}

5.2 缓存策略优化

缓存类型命中率内存占用QPS提升适用场景
Request Cache35%512MB+40%高频相同查询
Query Cache28%1GB+25%过滤条件重复
Fielddata42%2GB+18%排序/聚合操作

6. 异常场景处理

6.1 权重失效诊断

// 向 Elasticsearch 发送一个 GET 请求,用于验证在 "products" 索引上执行的查询语句是否有效
// 同时添加了 "explain" 参数,该参数会让 Elasticsearch 返回详细的解释信息,帮助我们理解查询是如何执行以及如何计算得分的
GET /products/_validate/query?explain
{"query": {"match": {"title": {// 要在 "title" 字段中搜索的关键词,这里是 "手机""query": "手机",// 为该查询条件设置权重,权重为 10// 权重会影响文档的相关性得分,权重越高,满足此条件的文档在排序时越有可能排在前面"boost": 10}}}
}

6.2 权重漂移监控

监控指标阈值检查频率自动修复方案
标题权重偏离>±15%每小时滚动重启查询节点
品牌召回率<85%实时触发权重重新加载
类目准确度<90%每天自动调整boost值

7. 最佳实践总结

7.1 黄金法则

    1. 标题优先:保持标题字段最高基础权重(建议8-15倍
    1. 品牌精确:对品牌字段使用keyword类型+term查询
    1. 类目引导:构建层级式类目权重(如一级类目6,二级类目4)
    1. 动态调节:结合运营活动实时调整权重系数

7.2 避坑指南

  • ❌ 避免无限制提升单一字段权重
  • 禁止在未测试情况下修改生产环境权重
  • ❌ 慎用超过20倍的boost值
  • 不要忽略停用词对权重的影响

实施建议:定期使用Explain API分析排序逻辑,结合用户点击日志持续优化权重配置,建议每月执行全量权重策略评估,采用蓝绿部署方式更新权重参数。

相关文章:

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.2.1 多字段权重控制(标题、品牌、类目)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 电商商品搜索实战&#xff1a;多字段权重控制策略1. 业务场景与核心挑战1.1 典型搜索问题1.2 权重失衡的影响数据 2. 权重控制核心方案2.1 字段权重分配矩阵2.2 多策略组合方…...

如何避免测试数据准备不充分或不可复用

避免测试数据准备不充分或不可复用的关键方法包括明确数据需求、统一数据管理工具、建立数据复用机制、定期维护更新测试数据以及加强团队沟通与协作。 其中&#xff0c;统一数据管理工具对确保数据质量和复用性尤为重要。例如&#xff0c;许多团队采用专门的测试数据管理工具以…...

使用AI一步一步实现若依(23)

功能23&#xff1a;从后端获取路由/菜单数据 功能22&#xff1a;用户管理 功能21&#xff1a;使用axios发送请求 功能20&#xff1a;使用分页插件 功能19&#xff1a;集成MyBatis-Plus 功能18&#xff1a;创建后端工程 功能17&#xff1a;菜单管理 功能16&#xff1a;角色管理…...

C语言的内存模型 (堆区,栈区,静态区,常量区,代码区 )概念讲解

C语言的内存模型分为5个区&#xff1a; 堆区&#xff0c;栈区&#xff0c;静态区&#xff0c;常量区&#xff0c;代码区 。 1、栈区 存放函数的参数值&#xff0c;局部变量等。 由编译器自动分配和释放。通常在函数执行完了就释放了。其操作方式类似于数据结构中的栈。栈内存…...

Vue3 知识点总结

Vue3 知识点总结 1. 核心概念 1.1 Composition API 1.1.1 setup 函数 setup是Vue3中的新的配置项&#xff0c;是组件内使用Composition API的入口在setup中定义的变量和方法需要return才能在模板中使用setup执行时机在beforeCreate之前&#xff0c;this不可用 export defa…...

第一天学爬虫

阅读提示&#xff1a;我今天才开始尝试爬虫&#xff0c;写的不好请见谅。 一、准备工具 requests库&#xff1a;发送HTTP请求并获取网页内容。BeautifulSoup库&#xff1a;解析HTML页面并提取数据。pandas库&#xff1a;保存抓取到的数据到CSV文件中。 二、爬取步骤 发送请求…...

W、M、C练题笔记(持续更新中)

web here are the flag 点击&#xff0c;页面跳转404.php&#xff0c;用bp抓包访问/flag.php页面&#xff0c;得到flag用base64解码 TryToFindFlag 打开后查看源代码 发现是robots协议&#xff0c;访问robots.txt 访问flllaaa......&#xff0c;得到空白页面&#xff0c;查看…...

CVE-2021-45232未授权接口练习笔记

CVE-2021-45232 是 Apache APISIX Dashboard 中的一个严重权限漏洞&#xff0c;类似于攻击者无需密码即可拿到整个网关系统的“万能钥匙”。攻击者利用此漏洞&#xff0c;可直接操控网关流量转发规则&#xff0c;甚至远程执行代码&#xff0c;引发服务器沦陷。 默认账户密码导致…...

贪心算法——c#

贪心算法通俗解释 贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优&#xff0c;而是通过局部最优的累积来逼近最终解。优点是简单高效&#xff0c;缺点是可能无法得到全局最优解。 一句话秒懂 自动售货机找零钱&#xff1a;用最少数量的…...

Retrofit中scalars转换html为字符串

简介 在Retrofit中&#xff0c;如果你想直接获取HTML或其他文本格式的响应内容而不是将其映射到一个模型类&#xff0c;ScalarsConverterFactory 就派上用场了。ScalarsConverterFactory 是一个转换器工厂&#xff0c;它能够将响应体转换为Java基本类型如String、Integer或Byte…...

【微服务架构】SpringCloud(七):配置中心 Spring Cloud Config

文章目录 配置中心为什么需要配置中心配置中心介绍 服务搭建基于GITHUB1.创建仓库2.新建微服务作为配置中心服务3.启动测试拉取 匹配规则分支读取 客户端配置配置文件引入依赖使用远程配置 刷新配置手动配置热更新自动刷新erlang安装RabbitMQ安装环境变量管理界面服务配置测试 …...

突破次元壁:基于Unity的MCP方案,用Claude一键生成完整游戏

在当今快速发展的技术领域,AI与游戏开发的结合正带来前所未有的创新。今天,我们将介绍一种革命性的解决方案——基于Unity的MCP(Model-Code-Pipeline)方案,通过Claude的强大自然语言处理能力,直接生成可玩的游戏!只需简单输入提示词,AI就能自动打开Unity并为你开发出一…...

Linux学习笔记(应用篇二)

基于I.MX6ULL.MINI开发板 开发板与电脑相互通信电脑与开发板互传文件 开发板与电脑相互通信 用网线将电脑与开发板连接 本人使用的是Ubuntu系统&#xff0c;不是虚拟机 一般来说刚开始电脑和开发板是ping不通的 首先查看电脑的 IP WinR&#xff0c;cmd调出终端 我使用的是…...

记录一次部署k3s后,服务404 page not found,nginx显示正常

服务部署k3s后&#xff0c;正常入口端怎么返回都是80&#xff0c;且返回错误 TRAEFIK DEFAULT CERT ERR_CERT_AUTHORITY_INVALID ngnix显示也是正常&#xff0c;怎么找也找不到问题 后来通过 iptables -L -n -t nat|grep 80 发现入口端流量被DNAT转到新的服务 而k3s中&#…...

mac上安装nvm及nvm的基本语法使用!!

种一棵树&#xff0c;最好是十年前&#xff0c;其次是现在&#xff01;想要改变&#xff0c;从此刻开始&#xff0c;一切都不晚&#xff01; 目录 nvm是什么&#xff1f;前提条件&#xff1a;安装homebrew如果系统已经有node版本&#xff1a;在mac上安装nvm&#xff1a;用nvm安…...

(基本常识)C++中const与引用——面试常问

作者&#xff1a;求一个demo 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 内容通俗易懂&#xff0c;没有废话&#xff0c;文章最后是面试常问内容&#xff08;建议通过标题目录学习&#xff09; 废话不多…...

ES 加入高亮设置

searchTextQueryOne new MatchQuery.Builder().field(searchFieldOne).query(searchText).build();// 帮助中心文档切分 只查询6条Integer finalTopK 10;List<String> newReturnFileds returnFields;newReturnFileds.add("kid"); // 需要返回kidHighlight h…...

dfs(深度优先)——太抽象了

1. 两种方法 #include<bits/stdc.h> using namespace std; //void dfs(int index,int n,vector<int> current) //{ // if(index>n){ // for(int i0;i<current.size();i){ // cout<<current[i]<<" "; // } // cout<<endl;…...

5分钟学会interface(纯标题党)

Golang中的interface&#xff08;接口&#xff09; 接口的定义 在 Go 语言中&#xff0c;接口&#xff08;interface&#xff09; 是一种特殊的类型&#xff0c;它定义了一组方法&#xff0c;而不关心具体的实现。任何类型只要实现了这些方法&#xff0c;就可以被认为满足这个…...

deepseek实战教程-第五篇支持deepseek的大模型应用安装及使用

目录 一.AnythingLLM 1.2 设置管理 1.3 关联知识库到对话 二.Cherrystudio 2.1 添加知识库文件 2.1.1 cherrystudio 2.1.2 anythingLLM 2.2 和知识库对话 三.AI产品落地之DIFY 3.1 安装Docker 3.2 下载dify压缩包 3.3 文件解压缩 3.4 文件重命名 3.5 设置模型 …...

嵌入式Linux RK3399启动模式及分区技术详解

嵌入式Linux RK3399启动模式及分区技术详解 一、RK3399启动模式分析 RK3399作为瑞芯微推出的高性能嵌入式处理器&#xff0c;其启动模式分为闭源与开源两种方案&#xff0c;核心区别在于前级Loader的实现方式。 1. 闭源启动流程 采用瑞芯微官方提供的闭源固件&#xff0c;流…...

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…...

redis解决缓存穿透/击穿/雪崩

文章目录 1.缓存穿透1.1 概念1.2 解决方案1.2.1 缓存空对象1.2.2 布隆过滤 1.2 店铺查询使用缓存穿透解决方案1.2.1 流程 2.缓存雪崩2.1 什么是缓存雪崩&#xff1f;2.2 雪崩解决方案 3.缓存击穿3.1 什么是缓存击穿&#xff1f;3.2解决方案3.2.1 基于互斥锁解决缓存击穿问题&am…...

特征工程自动化(FeatureTools实战)

目录 特征工程自动化(FeatureTools实战)1. 引言2. 项目背景与意义2.1 特征工程的重要性2.2 自动化特征工程的优势2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 自动化特征工程理论基础4.1 特征工程的基本概念4.2 FeatureTools库简介4.3 关键公…...

哈希表简单例子

一、题意 给定一个整数数组&#xff0c;判断数组中是否存在重复的元素。如果存在一值在数组中出现至少两次&#xff0c;函数返回 True &#xff1b;如果数组中每个元素都不相同&#xff0c;则返回 False 。 输入: [1, 2, 3, 1] 输出: True 输入: [1, 2, 3, 4] 输出: False …...

利用GitHub Pages快速部署前端框架静态网页

文章目录 前言GitHub Pages 来部署前端框架&#xff08;Vue 3 Vite&#xff09;项目1、配置 GitHub Pages 部署2、将项目推送到 GitHub3、部署到 GitHub Pages4、访问部署页面5、修改代码后的更新部署顺序 前言 可以先参考&#xff1a; 使用 GitHub Pages 快速部署静态网页: …...

《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…...

Skynet 中 snlua 服务启动整体流程分析

前言&#xff1a; 在 Skynet 中&#xff0c;Lua 扮演了极其重要的角色。Skynet 大多数业务逻辑都跑在一个个 Lua 服务里&#xff0c;而能够将 Lua 环境嵌入到 Skynet 框架下&#xff0c;并与 Skynet 消息调度机制完美结合&#xff0c;正是 snlua 服务所承担的核心功能。 本文将…...

python每日十题(10)

在Python语言中&#xff0c;源文件的扩展名&#xff08;后缀名&#xff09;一般使用.py。 保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。Python 3.x有35个关键字&#xff0c;分别为&#xff1a;and&#xff0c;as&#xff0c;assert&am…...

基于大模型预测的初治菌阳肺结核诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、初治菌阳肺结核概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 传统诊疗方法与局限性 三、大模型在初治菌阳肺结核预测中的应用原理 3.1 大模型技术简介 3.2 数据收集与预处理 3.3 模型构建与训练 3.4 模型…...