您的位置:首页 > 游戏 > 游戏 > 【Elasticsearch】在es中实现mysql中的FIND_IN_SET查询条件

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

2024/11/16 11:48:46 来源:https://blog.csdn.net/gjwgjw1111/article/details/139992397  浏览:    关键词:【Elasticsearch】在es中实现mysql中的FIND_IN_SET查询条件

需求场景: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文等等 。
商品表中有一个type字段,储存的事商品类型例如:1.热销单品,2.品类TOP10,3.销量榜TOP10等等
它的type字段值很有可能是1,2,3,4

在mysql中实现语句

select * from product where FIND_IN_SET('4',type)

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

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

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


$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的数据


// 初始化查询参数数组
$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 [];
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com