lucene4.0如何统计热词

jkluooop 发布于 2015/05/15 04:06
阅读 1K+
收藏 0
项目有个需求,比如有一个用户留言表leavemsg[id,content,userid], 要实现统计content里出现频率在前10的热词,以及它出现的记录的总数。

我的解决思路遇到点问题:
    1. 新增记录的时候,提交lucene服务新增索引。
    2. 使用IK分词得到词频,按 <key,num>更新到redis, key存在就+num,否则插入.
    3. 使用redis的排序找出前10的热词,然后传给lucene查找得到hit数,返回。
我不确定这种思路是不是可行,因为数据量随着时间会越来越大。
当然可以折衷就月初清理一次统计表,热词只随着时间统计到月底,查找的时候加个参数,时间范围。

搜了下lucene4的资料,好像给content添加索引的时候,将Field.TermVector.YES传进去,然后可以用来获取到词频。如下:
  

public void printTermFreqByField() throws IOException {
     Directory indexDirectory = FSDirectory.open(new File("E:/lucene"));
     IndexReader indexReader = DirectoryReader.open(indexDirectory);
     Terms terms = MultiFields.getTerms(indexReader, "content");
     TermsEnum termsEnums = terms.iterator(null);
     BytesRef byteRef = null;
     System.out.println("field : content");
     while ((byteRef = termsEnums.next()) != null) {
         String term = new String(byteRef.bytes, byteRef.offset,byteRef.length);
         System.out.println("term is : " + term);
         System.out.println(termsEnums.totalTermFreq()); //这里有点困惑.
}}

这种的话怎么排序呢?如果term比较大.
请教更好,更稳妥,更高效的解决办法。




加载中
返回顶部
顶部