mysql - 在 MySQL 中获得更准确结果的最佳方法
问题描述
我在开发环境上面临两难境地。这是一个三表结构:
- 表格内容(文章、新闻...)
- 表标签(每篇文章和新闻记录的标签)
- 表跳过词(诸如“for”、“get”、“to”之类的词......)
主要思想是根据文本搜索获取内容记录,如何?
首先,根据Skip Words表从文本搜索中删除单词,然后将其余单词与 tags 表匹配。但是,我想给出一个“更聪明”的结果,作为
第二步,我想首先得到与文本搜索的所有剩余单词匹配的文章。这些记录将是主要印刷品。
第三步,如果没有与文本搜索的所有单词匹配的记录,则开始寻找匹配较少单词的记录并记录它们,依此类推,直到我得到一个内容记录列表。
最后一步是显示根据单词匹配量排序的那些记录。所以,考虑到这个过程,我想使用:
- 用于从提到的所有步骤加载数据的临时表
- 使用具有所有所需逻辑的单个存储过程
以上比较标签,使用“喜欢”条件(and field like "word1%" and field like "word2%"
)
但是,我担心的是性能。这将是主页网站中的一个过程,该网站每小时访问量超过 1700 次。我很感激你能解释你对这种过程的经验(如果有的话)?或者您认为考虑性能的最佳实施方式是什么?
解决方案
使用FULLTEXT
索引。它涵盖了您试图重新发明的一些想法。1700/hr 没问题。
WHERE MATCH(col) AGAINST('join*' IN BOOLEAN MODE)
匹配加入/加入/加入和联合。
推荐阅读
- javascript - 解构并分配给实例属性
- flutter - Flutter Run 无法解析配置“:classpath”的所有工件。找不到com.android.tools.build::4.1.0
- java - org.apache.juli.AsyncFileHandler 内存泄漏怎么办?
- python - 如何使用我已经安装在其他 IDE 中的 python 包
- json - 在 Python 中将数据结构转换为另一个数据结构
- ios - 画中画崩溃-iOS
- python - 使用 Pyinstaller 打包 Kivy 应用程序 - AttributeError
- websocket - 接收“400 Bad Request”的 WebSocket 请求调用到 sap 应用程序
- typescript - 从对象中提取子类型
- oracle - 解释计划在名称部分显示列名?