Javin
Javin
  • 发布:2023-06-06 12:00
  • 更新:2023-06-06 14:23
  • 阅读:345

如何快速的模糊查询?

分类:uniCloud

我的应用里面可以对文章添加标签,正如DCloud问答可以添加话题,在我的应用中用户可以模糊查询这些标签和文章名称显示文章列表,查询的时候可以同时输入多个标签做复合查询,如何才能做到快速模糊查询?我应该如何存储这些标签?我能想到的方法有两个
1:所有标签组合成一个字符串例如 "A"+ "/" + "B" + "/" + "C" = "A/B/C",之后利用模糊查询字符串
2:标签放在一个数组中["A", "B","C"] 之后模糊查询这个数组(可能没有这种操作而且我也不确定数组建索引是有效的)
我看这里https://ask.dcloud.net.cn/question/129889有人使用了数组的模式,但是不知道这个查询速度怎样,而且也知道数字是否可索引。

第一种方法感觉看上去效率会更高一些,但是因为这个查询是这个应用访问量最大最频繁的功能所以速度不能慢,就算在这个字段建索引,如果模糊查询是全表遍历的话那肯定是不行的。

我看索引文档https://uniapp.dcloud.net.cn/uniCloud/db-index.html#里最后写:
正则表达式
正则查询无法使用索引提升性能。

那么模糊查询属于正则查询吗?

mongodb 好像只有a%的形式模糊查询才会走索引。

但显然我的需求需要%a%的形式如何快速查询?

我看mongodb好像有分词查询的功能,uniCloud的mongodb是否也有?

还有如果一张表的数据很多我是不是应该把已经过期的文章移动到另一张表来提高活跃文章的查询速度?还是说我只需要给已经过期的数据增加一个索引标记,之后查询的时候带上这个索引条件就不会影响到活跃文章的查询速度?
(将过期的数据移动到另一张表的问题就是会带来程序管理上的复杂性。)

能否利用redis进行加速,但是我看了一下redis缓存数据并不适合频繁变动的数据,用户发文章是一个高频动作,而且文章数据多的时候都缓存到redis里可能也并不是太好的选择。

2023-06-06 12:00 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

如果对第一种使用正则进行查询是不能使用索引进行查询加速的,第二种对数组建索引是能对查询有加速效果的。需要注意所有使用正则的查询都不能使用索引,必须依赖其他字段的索引进行查询性能的优化,比如再额外通过时间筛选

  • Javin (作者)

    模糊查询属于正则查询吗?还是内部做了单独的处理比如分词来提高效率。我看好像mongodb可以做text索引可能是分词的方式实现的。数组建索引如果要模糊查询是不是就没有加速了?

    2023-06-06 15:01

  • DCloud_uniCloud_WYQ

    回复 Javin: 目前腾讯和阿里都不支持text索引,只要是正则模糊查询都没有加速

    2023-06-06 15:47

  • Javin (作者)

    回复 DCloud_uniCloud_WYQ: 明白了那看来要自己做个分词,把模糊的词都加到标签里面,然后对用户隐藏掉。

    2023-06-06 15:55

要回复问题请先登录注册

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容