开发者社区> 问答> 正文

使用SQL确定文本字段的字数统计?mysql

我最近一直在研究一些数据库搜索功能,希望获得一些信息,例如每个文档的平均单词数(例如数据库中的文本字段)。到目前为止,我发现的唯一内容(没有在DB外部进行选择的语言处理)是:

SELECT AVG(LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1) FROM documents 这似乎可行*,但您还有其他建议吗?我目前使用的是MySQL 4(希望很快将其迁移至该应用程序的版本5),但也对通用解决方案感兴趣。

谢谢!

*我可以想象这是确定它的一种相当粗糙的方法,因为它也没有考虑内容等中的HTML。这个特定项目可以,但是还有更好的方法吗?

更新:定义“更好”的意思是:更准确,执行效率更高或更“正确”(易于维护,良好实践等)。对于我可用的内容,上面的查询对于该项目来说足够快且准确,但是将来我可能需要类似的内容(所以我问)。

展开
收起
保持可爱mmm 2020-05-16 22:14:34 1099 0
1 条回答
写回答
取消 提交回答
  • MySQL的文本处理功能不足以满足您的需求。存储功能是一个选项,但可能会很慢。在MySQL中处理数据的最佳选择是添加一个用户定义的函数。无论如何,如果要构建MySQL的较新版本,也可以添加一个native函数。

    “正确”的方法是在数据库外部处理数据,因为数据库用于存储而不是处理,并且任何繁重的处理都可能给DBMS带来过多的负担。此外,在MySQL之外计算字数使更改字数定义变得更加容易。更改文档时如何将单词计数存储在数据库中并进行更新?

    存储功能示例:

    DELIMITER $$ CREATE FUNCTION wordcount(str LONGTEXT) RETURNS INT DETERMINISTIC SQL SECURITY INVOKER NO SQL BEGIN DECLARE wordCnt, idx, maxIdx INT DEFAULT 0; DECLARE currChar, prevChar BOOL DEFAULT 0; SET maxIdx=char_length(str); SET idx = 1; WHILE idx <= maxIdx DO SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]'; IF NOT prevChar AND currChar THEN SET wordCnt=wordCnt+1; END IF; SET prevChar=currChar; SET idx=idx+1; END WHILE; RETURN wordCnt; END $$ DELIMITER ;来源:stack overflow

    2020-05-16 22:26:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像