[SQL] 请问这种字段超多的数据表应该怎么检索全部字段

2020-12-10 10:00:05 +08:00
 12tall

小弟对数据库仅用过简单的增删改查。昨天同事提了个想法,有点懵逼。求各位大佬指点迷津🙏

需求:

  1. 数据表中的字段比较多,大概有 70 多个,主要用于存放一些实验数据(不只是数值);
  2. 用户想使用自然语言(英文) 在所有字段中检索;
  3. 数据表可能会经常增加字段;
  4. 字段太多,在 Web 端显示不开

思路与疑惑

  1. 在全部字段中进行模糊查询?
    • 英文可以利用空格来分词;
    • 百度得知可以使用MySQLCONCAT() 函数来拼接字段;
    • where 后面的检索条件应该通过遍历用户输入来拼接,所以需要限制用户输入长度;
    • 需不需要用到视图,数据表更新后还需要手动更新视图?
  2. 怎么对查询结果进行相关性的排序?
    • 目前能想到的就只有利用case...when... 计数。
  3. Web 端显示
    • 目前利用vue + element 可以实现用户自定义显示 /隐藏列。

烦请各位大佬给点意见,或者可以参考(白嫖)的项目,谢谢!🙏

1955 次点击
所在节点    程序员
14 条回复
l00t
2020-12-10 10:09:52 +08:00
不知道你在说什么…… 你这列的“需求”,完全不清晰。像“4.", 这甚至不是需求。

使用自然语言在所有字段中检索?这是个怎样的场景?

“相关性排序”又是个什么东西?
ztxcccc
2020-12-10 10:13:58 +08:00
上搜索引擎,Apache Solr
l00t
2020-12-10 10:14:02 +08:00
不考虑那些不清楚的内容,单说字段可能经常增加这点,使用传统关系型数据库的话,一般可以用纵表形式。字段是一条记录,而不是真的表字段。而建的表可以是 ID, 字段名,字段值 这样的形式。

不过如果综合你别的需求来考虑的话,那整个模型就未必合适。
12tall
2020-12-10 10:21:33 +08:00
@l00t 非常感谢
`4.` 的话是做网页的时候遇到的一个比较头疼的问题,跟 SQL 无关

我理解的检索是:用户输入一组关键词,去匹配数据表中的所有字段,返回包含全部或几个关键词的记录行
如果某一行包含所有用户输入的关键词,那么它就要被优先显示
12tall
2020-12-10 10:24:04 +08:00
@ztxcccc 谢谢,去百度一下
l00t
2020-12-10 10:28:04 +08:00
@12tall #4 这种检索方式就不要用 mysql 了,用 elastic search 之类的吧。
12tall
2020-12-10 10:31:13 +08:00
@l00t 哇,非常感谢大佬的推荐。谢谢!
dfzj
2020-12-10 15:02:17 +08:00
给这个结构化数据库对应建立一张资源索引表:
CEATE TABLE table1 (id
, content TEXT -- 把所有字段内容放入该字段中
, srcId -- 源表 ID)

然后界面上用户输入 关键词,去查出 table1.conent, 得到 srcId, 最终找到目标
12tall
2020-12-10 15:25:59 +08:00
@dfzj 谢谢,请问这个和视图、或者传说中的倒排索引是不是很像呢
dfzj
2020-12-10 15:32:21 +08:00
@12tall 有点那种意思,但还差的远。倒排索引还得把所有字段内容先做分词,然后按照词来排
imn1
2020-12-10 15:46:16 +08:00
2. google "SQL 全文检索"
3. 考虑 NOSQL,或者 sql+json
whx20202
2020-12-10 16:01:13 +08:00
1. 用一个同步工具(订阅 binlog 那种)同步到 elastic search 里。
2. 用 es 查询
shuax
2020-12-10 16:43:46 +08:00
改用 es
wakzz
2020-12-11 09:27:54 +08:00
你这个需求不建议使用 mysql,建议将 mysql 的数据实时同步到 es 后,通过 es 来查询

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

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

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

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

© 2021 V2EX