gpt4 book ai didi

mysql - 搜索文本输入以查找数据库列表中出现的单词

转载 作者:行者123 更新时间:2023-11-29 03:16:18 27 4
gpt4 key购买 nike

我有一个 MySQL 表,其中包含一个坏词列表 (bad_words),我想扫描一个文本字段 (public_message) 以了解该字段中的坏词数量。 bad_words中大约有1100个词条

我试过 contains,但它只查看一个词。

是这样的:
选择 public_post_id, count(word)
来自 public_posts
WHERE public_message CONTAINS(SELECT word FROM bad_words)
我知道这种语法是错误的,但这是我要实现的目标的要点。

最终输出应该是每条public_message中的一些坏词。我现在不关心哪些词,只要有的话,有多少。

最佳答案

你可以这样做:

SELECT p.public_post_id, COUNT(*)
FROM public_posts p JOIN bad_words b
ON public_message LIKE CONCAT('%', b.word, '%')

但它的性能会非常差。它必须执行的搜索次数等于 public_posts 中的行数 乘以 bad_words 中的 1,100 个单词。

MySQL 具有全文索引功能,但它不适用于您的情况。

https://dev.mysql.com/doc/refman/8.0/en/fulltext-restrictions.html说:

The argument to AGAINST() must be a string value that is constant during query evaluation. This rules out, for example, a table column because that can differ for each row.

换句话说,您不能这样做:

SELECT ...
FROM public_posts p JOIN bad_words b
ON MATCH(p.public_posts) AGAINST(b.word) -- ERROR!

您可以一次搜索一个词,但这样就需要 1,100 个查询。

或者您可以通过在 AGAINST 表达式中列出许多单词来使用全文索引:

SELECT ...
FROM public_posts p
WHERE MATCH(p.public_posts) AGAINST('word1 word2 word3 word4 word5...' IN BOOLEAN MODE)

许多单词可以是您通过查询 bad_words 表生成的列表。

但这不会告诉您每个单词的匹配数,只会告诉您该帖子至少包含一个匹配的单词。

此外,我不确定是否有长度限制,或者您是否可以将所有 1,100 个坏词组成一个字符串。

我不知道有任何其他全文搜索实现可以更好地处理这个问题。

关于mysql - 搜索文本输入以查找数据库列表中出现的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com