mysql-反向搜索:每个文档的短语

mysql-反向搜索:每个文档的短语,第1张

概述我有一个充满短语(80-100个字符)和一些冗长的文档(50-100Kb)的数据库,我想要给定文档的短语排名列表;而不是搜索引擎的通常输出,而是给定短语的文档列表.我以前使用过MySQL全文索引,并研究了Lucene,但从未使用过.他们似乎都倾向于比较短(搜索词)和长(文档).您将如何获得相反的结果?最佳答案我对Wikipedia标题数据库做了类似的工作,每

我有一个充满短语(80-100个字符)和一些冗长的文档(50-100Kb)的数据库,我想要给定文档的短语排名列表;而不是搜索引擎的通常输出,而是给定短语的文档列表.

我以前使用过MySQL全文索引,并研究了Lucene,但从未使用过.
他们似乎都倾向于比较短(搜索词)和长(文档).

您将如何获得相反的结果?

最佳答案我对Wikipedia标题数据库做了类似的工作,每个〜50KB的文档设法减少了几百毫秒.那仍然不够快,无法满足我的需求,但也许可以为您工作.

基本上,该想法是尽可能使用散列,并且仅对可能的匹配项进行字符串比较,这是非常罕见的.

首先,获取数据库并将其转换为哈希数组.如果您有数十亿个短语,则可能不适合您.在计算哈希值时,请确保将词组传递给标记器,以消除标点符号和空格.这部分只需完成一次.

然后,使用相同的标记生成器浏览文档,保留最后的1,2,.. n个标记散列的运行列表.在每次迭代时,您都对哈希数据库中的哈希进行二进制搜索.

找到匹配项时,您将进行实际的字符串比较,以查看是否找到匹配项.

这是一些代码,我想告诉您,艰难的此示例实际上并未进行字符串比较:

            HashSet<Long> foundHashes = new HashSet<Long>();            linkedList<String> words = new linkedList<String>();            for(int i=0; i<params.maxPhrase; i++) words.addLast("");            StandardTokenizer st = new StandardTokenizer(new StringReader(docText));            Token t = new Token();            while(st.next(t) != null) {                String token = new String(t.termBuffer(),t.termlength());                words.addLast(token);                words.removeFirst();                for(int len=params.minPhrase; len<params.maxPhrase; len++) {                    String term = Utils.join(new ArrayList<String>(words.subList(params.maxPhrase-len,params.maxPhrase))," ");                    long hash = Utils.longHash(term);                    if(params.lexicon.isTermHash(hash)) {                        foundHashes.add(hash);                    }                }            }            for(long hash : foundHashes) {                if(count.containsKey(hash)) {                    count.put(hash,count.get(hash) + 1);                } else {                    count.put(hash,1);                }            }
总结

以上是内存溢出为你收集整理的mysql-反向搜索:每个文档的短语 全部内容,希望文章能够帮你解决mysql-反向搜索:每个文档的短语 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/1165531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存