【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 [];
}
相关推荐
七夜zippoe1 小时前
OpenClaw 数据加密:敏感信息保护的完整方案
数据库·mysql·php·openclaw·敏感保护
万亿少女的梦1681 小时前
基于Node.js和Express的旅游信息管理平台设计与开发
mysql·node.js·express·系统设计·旅游信息管理
万亿少女的梦16813 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
万亿少女的梦16813 小时前
基于SpringBoot与Vue的历史博物馆展品展示与游客管理系统设计
spring boot·mysql·vue·系统设计·博物馆管理系统
灯澜忆梦15 小时前
MySQL 完整学习路线
学习·mysql
ClouGence15 小时前
保障公共安全,一线治安机构实时数据应用与实践
数据库·mysql·postgresql
Minxinbb16 小时前
TDSQL for MySQL 服务器重启操作
数据库·mysql·dba
阿里云大数据AI技术16 小时前
AI Search × ES Agent Builder 最佳实践:企业智能助手落地指南
人工智能·elasticsearch
渣渣灰飞17 小时前
MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第三节:ORDER BY + LIMIT(排序 + 分页)
数据库·学习·mysql
fengbingchun19 小时前
客户端获取服务器端MySQL数据库表中数据C++实现
mysql