【Elasticsearch】在es中实现mysql中的FIND_IN_SET查询条件

需求场景: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文等等 。

商品表中有一个type字段,储存的事商品类型例如:1.热销单品,2.品类TOP10,3.销量榜TOP10等等

它的type字段值很有可能是1,2,3,4

在mysql中实现语句

bash 复制代码
select * from product where FIND_IN_SET('4',type)

就可以查询到实例里的数据,那么在es里要怎么实现呢!?

es中实现mysql中的FIND_IN_SET查询条件

第一步:插入数据时将原有的1,2,3,4修改成数组1,2,3,4

php 复制代码
$string = '1,2,3,4,5';
//将数据库里的字符串分割成数组,将输入存入es内
$array = explode(",", $string);
$data['type'] = $array;
$params = [
    'index' => 'index_new', // 索引名称
    'type' => 'my_type',  // 类型名称(注意:在 Elasticsearch 7.x+ 中,类型已被弃用)
    'id' => $id,        // 文档ID(可选,如果不提供,则自动生成)
    'body' => $data,
];
 // 添加文档到索引
 return $this->client->index($params);

第二步:查询type内包含4的数据

php 复制代码
// 初始化查询参数数组
$params = [
    'index' => 'index_new', // 设置索引名称为'index_new'
    'body' => [ // 查询主体内容
        'query' => [ // 定义查询结构
            'bool' => [ // 使用布尔查询组合多个查询条件
                'must' => [ // 必须满足以下所有条件
                    [ // 匹配 type 字段的特定值
                        'terms' => [ // 使用terms查询匹配多个值
                            'type' => [4] // 查询条件为type字段等于4。此处[type]应为[type_id],若按原需求应匹配type_id字段,则为笔误。
                        ]
                    ],
                ]
            ]
        ]
    ]
];

$response = $this->client->search($params);
// 处理响应
if (isset($response['hits']['hits']) && !empty($response['hits']['hits'])) {
    // 遍历结果并输出
    return $response['hits']['hits'];
} else {
    return [];
}
相关推荐
Elastic 中国社区官方博客8 小时前
Elasticsearch DiskBBQ:使用原生 SIMD Blocks 实现快 40% 的向量评分计算
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·diskbbq
Elastic 中国社区官方博客9 小时前
Kibana:使用 AI Chat 及 MCP 轻松创建 AI 原生仪表板
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·信息可视化
Database_Cool_10 小时前
Hudi 湖仓一体架构:阿里云 AnalyticDB MySQL 原生集成最佳实践
数据库·mysql·阿里云
_qingche11 小时前
H2 数据库到 MySQL 数据迁移
java·数据库·spring boot·mysql·spring·重构·kotlin
AOwhisky12 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
数据库小学妹12 小时前
MySQL ORDER BY 深度解析:Using temporary 与 Using filesort 的底层机制及索引优化实战
数据库·经验分享·mysql·性能优化·dba
可乐ea12 小时前
【知识获取与分享社区项目 | 项目日记第 21 天】索引构建与联想建议:Outbox 增量更新 + Completion Suggester
java·大数据·mysql·elasticsearch·搜索引擎
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
醉颜凉14 小时前
深度解析 Elasticsearch 搜索过程:Query Then Fetch 两阶段详解
大数据·elasticsearch·搜索引擎