如何解决用纯HTML内容索引PostgreSQL数据库的最佳方法?
我有一个数据库,其中包含几百万个帖子,每个帖子的“内容”列均以纯HTML格式包含帖子内容。
<div class="quoteheader"><a href="http://website.com/message?id=52501">
Quote from: X on October 22,2013,02:07:08 PM</a>
</div>
<div class="quote">
Hi,how are you all?
<br></div>
<br>I'm good,how about you?
我想制作一个完整的搜索工具,使人们可以搜索帖子。在这种情况下,有人可以搜索“你好吗”,这将导致发布该帖子。
我考虑过使用gin创建ts_vector索引:
CREATE INDEX posts_content_search ON posts using gin(to_tsvector('simple',content));
允许进行此类搜索。
SELECT * FROM posts WHERE to_tsvector('simple',content) @@ phraseto_tsquery('simple','how are you');
但是,在创建它时,不仅会不断显示很多消息:
DETAIL: Words longer than 2047 characters are ignored.
NOTICE: word is too long to be indexed
,但它也将html标签保存在索引中(例如:div,b,a,br ...),而最好的方法是删除标签并仅对帖子的真实内容进行索引(“嗨,所有人”和“我很好,你呢”)
创建索引以允许此类搜索的最佳方法是什么?
解决方法
从
strip(to_tsvector('simple',content))
的输出中可以看出,'simple'已经排除了html标记的内容:
strip
-----------------------------------------------------------------------------------------------------------------------
'02' '07' '08' '2013' '22' 'about' 'all' 'are' 'from' 'good' 'hi' 'how' 'i' 'm' 'october' 'on' 'pm' 'quote' 'x' 'you'
请注意缺少'br','div'等
包含“来自:X的报价”部分,因为该部分不在标签中。如果您想排除这种情况,那么您想使用什么逻辑呢?
有关长字的警告可以忽略。如果您需要有关修复它们的建议,则应向我们展示产生它们的示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。