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

2020 年 8 月 6 日
 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

6027 次点击
所在节点    MySQL
32 条回复
wangkun025
2020 年 8 月 6 日
预处理好。
yrj
2020 年 8 月 6 日
全文检索?
bestsanmao
2020 年 8 月 6 日
select 字段名 from 表名 where instr('你的句子', 字段名)<>0
err1y
2020 年 8 月 6 日
jieba 分词
PhilC
2020 年 8 月 6 日
先分词呗
hbolive
2020 年 8 月 6 日
上分词系统比较好,这么直接 mysql 查没搞过。。
iblislsy
2020 年 8 月 6 日
把 100w 个词组添加到 jieba 的分词 dict,python 分词完直接用 counter 统计。
lithbitren
2020 年 8 月 6 日
分词哈希,前缀树都可以,100W 个词读进内存也没多少,成熟的轮子也时一沓一沓的
qiayue
2020 年 8 月 6 日
经典的倒排索引使用场景
sadfQED2
2020 年 8 月 6 日
分词,上 es,mysql 或许不行吧? mysql 能改分词器吗
zxcvsh
2020 年 8 月 6 日
试试 ES 吧,如果场景合适的话
rockyou12
2020 年 8 月 6 日
mysql 原生做不到
ic2y
2020 年 8 月 6 日
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 年 8 月 6 日
先分词 再查询
TimePPT
2020 年 8 月 6 日
请求量大上 ES
请求量不大,可以看看这个?
《 FlashText:语料库数据快速清理利器》
https://www.jiqizhixin.com/articles/2017-11-10-4
wjhjd163
2020 年 8 月 6 日
同上,倒排索引
直接查询还想要高速是肯定不可能的,这个结构还需要变化才行
如果数据少那直接分词后搜索即可
freelancher
2020 年 8 月 6 日
我的原始思路是先分词。然后第一个词,一个个字母去对。

O 了。这个是算法题吧。应该有解的。
oscer
2020 年 8 月 6 日
ES
lau52y
2020 年 8 月 6 日
es 最合适了吧
RJH
2020 年 8 月 6 日
何苦这样迫害 mysql 呢,人家原生就不是用来搞全文检索的,有 ES 不香吗?

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

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

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

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

© 2021 V2EX