MySQL 存储了 100 万个词组,给出一字符串,怎样最快找出 100 万个词组中存在的词组?

2020-08-06 11:10:04 +08:00
 kisshere

MySQL 中存储的词组,比如:yellow wall,little cat,brown cat 、yellow dog 、coffee cup 之类的完全不同的词组总共 100W 行,现在给出一个句子,比如:“a little cat is sleeping behind a yellow wall with a yellow dog”,怎样以最快速度提取出这个 100W 词组中存在的词组:yellow wall,little cat 、yellow dog

4913 次点击
所在节点    MySQL
32 条回复
wangkun025
2020-08-06 11:11:34 +08:00
预处理好。
yrj
2020-08-06 11:18:10 +08:00
全文检索?
bestsanmao
2020-08-06 11:20:47 +08:00
select 字段名 from 表名 where instr('你的句子', 字段名)<>0
err1y
2020-08-06 11:24:44 +08:00
jieba 分词
PhilC
2020-08-06 11:29:23 +08:00
先分词呗
hbolive
2020-08-06 11:35:56 +08:00
上分词系统比较好,这么直接 mysql 查没搞过。。
iblislsy
2020-08-06 11:40:20 +08:00
把 100w 个词组添加到 jieba 的分词 dict,python 分词完直接用 counter 统计。
lithbitren
2020-08-06 11:51:52 +08:00
分词哈希,前缀树都可以,100W 个词读进内存也没多少,成熟的轮子也时一沓一沓的
qiayue
2020-08-06 11:52:47 +08:00
经典的倒排索引使用场景
sadfQED2
2020-08-06 12:15:51 +08:00
分词,上 es,mysql 或许不行吧? mysql 能改分词器吗
zxcvsh
2020-08-06 12:49:48 +08:00
试试 ES 吧,如果场景合适的话
rockyou12
2020-08-06 12:56:19 +08:00
mysql 原生做不到
ic2y
2020-08-06 13:22:06 +08:00
100 万条词组,首先向量化,例如 yellow wall,可以标记为 [1,2] 1 表示 yellow,2 表示 wall

以此类推,little cat,可以标记为 [1, 3] 3 表示 cat 。

100 万条 向量化的词组,就是 100 万条 整形数组的序列,把这个序列变成 一个字典前缀树。

Node{
int value;
Map<Interget,Node> childs;
}

这棵树,在 100 万的量级,应该不大。都是整形的。保存在内存中。

遇到 a little cat is sleeping behind 就向量化,变成 23 45 18 1 4 之类的数字,

从 23 开始,依次从字典前缀树的 root,开始匹配,是否能匹配到叶子节点。如果匹配到,就输出。

否则,继续匹配 45 、18 等。
leapV3
2020-08-06 15:23:44 +08:00
先分词 再查询
TimePPT
2020-08-06 15:31:24 +08:00
请求量大上 ES
请求量不大,可以看看这个?
《 FlashText:语料库数据快速清理利器》
https://www.jiqizhixin.com/articles/2017-11-10-4
wjhjd163
2020-08-06 15:34:45 +08:00
同上,倒排索引
直接查询还想要高速是肯定不可能的,这个结构还需要变化才行
如果数据少那直接分词后搜索即可
freelancher
2020-08-06 15:39:07 +08:00
我的原始思路是先分词。然后第一个词,一个个字母去对。

O 了。这个是算法题吧。应该有解的。
oscer
2020-08-06 15:41:56 +08:00
ES
lau52y
2020-08-06 16:52:45 +08:00
es 最合适了吧
RJH
2020-08-06 17:39:37 +08:00
何苦这样迫害 mysql 呢,人家原生就不是用来搞全文检索的,有 ES 不香吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696081

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX