Lucene热词统计

1、建立搜索表 ID KeyWords DT 搜索一次保存一次,id才用guid提高效率

      /// <summary>
        /// 搜索数据
        /// </summary>
        /// <returns></returns>
        private List<ViewSarchContentModel> SearchBookContent()
        {
            string indexPath = @"C:\lucenedir";
            List<string> kw =Common.WebCommon.GetPanGuWord(Request["txtContent"]);

            FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory());
            IndexReader reader = IndexReader.Open(directory, true);
            IndexSearcher searcher = new IndexSearcher(reader);
            //搜索条件
            PhraseQuery query = new PhraseQuery();
            foreach (string word in kw)//先用空格,让用户去分词,空格分隔的就是词“计算机   专业”
            {
                query.Add(new Term("Content", word));
            }
            //query.Add(new Term("body","语言"));--可以添加查询条件,两者是add关系.顺序没有关系.
            //query.Add(new Term("body", "大学生"));
            //query.Add(new Term("body", kw));//body中含有kw的文章
            query.SetSlop(100);//多个查询条件的词之间的最大距离.在文章中相隔太远 也就无意义.(例如 “大学生”这个查询条件和"简历"这个查询条件之间如果间隔的词太多也就没有意义了。)
            //TopScoreDocCollector是盛放查询结果的容器
            TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);
            searcher.Search(query, null, collector);//根据query查询条件进行查询,查询结果放入collector容器
            ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;//得到所有查询结果中的文档,GetTotalHits():表示总条数   TopDocs(300, 20);//表示得到300(从300开始),到320(结束)的文档内容.
            //可以用来实现分页功能

            List<ViewSarchContentModel> list = new List<ViewSarchContentModel>();
            for (int i = 0; i < docs.Length; i++)
            {
                ViewSarchContentModel viewModel = new ViewSarchContentModel();
                //
                //搜索ScoreDoc[]只能获得文档的id,这样不会把查询结果的Document一次性加载到内存中。降低了内存压力,需要获得文档的详细内容的时候通过searcher.Doc来根据文档id来获得文档的详细内容对象Document.

                int docId = docs[i].doc;//得到查询结果文档的id(Lucene内部分配的id)
                Document doc = searcher.Doc(docId);//找到文档id对应的文档详细信息
                viewModel.Id = doc.Get("Id");
                viewModel.Title = doc.Get("Title");
                viewModel.Content =Common.WebCommon.CreateHightLight(Request["txtContent"], doc.Get("Content"));//搜索内容关键字高亮显示
                list.Add(viewModel);

            }
            SearchDetails searchDetail = new SearchDetails();
            searchDetail.Id = Guid.NewGuid();
            searchDetail.KeyWords = Request["txtContent"];
            searchDetail.SearchDateTime = DateTime.Now;
            SearchDetailsService.AddEntity(searchDetail);

            return list;
        }

搜索数据

2、建立搜索统计表 ID KeyWords SearchCount 定时任务每天凌晨统计

Quartz.Net 调度框架配置介绍

导入 Quartz.dll 和 Common.Logging.dll文件,而spring.net已经引用了Common.Logging.dll,所以要保证两个用的版本一致

 public class IndexJob:IJob
    {
        IBLL.IKeyWordsRankService bll = new BLL.KeyWordsRankService();
        public void Execute(JobExecutionContext context)
        {
            bll.DeleteAllKeyWords();
            bll.InsertKeyWords();
        }
    }

在DBSESSION加入执行SQL方法

    public int ExecuteSql(string sql,params System.Data.SqlClient.SqlParameter[] pars)
        {
           return Db.Database.ExecuteSqlCommand(sql, pars);
        }
        public List<T> ExecuteSelectQuery<T>(string sql, params System.Data.SqlClient.SqlParameter[] pars)
        {
            return Db.Database.SqlQuery<T>(sql, pars).ToList();
        }

建立业务KeyWordsRankService 类

using CZBK.ItcastOA.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CZBK.ItcastOA.IBLL
{
   public partial interface IKeyWordsRankService:IBaseService<KeyWordsRank>
    {
       bool DeleteAllKeyWords();
       bool InsertKeyWords();
       List<string> GetSearchWord(string str);
    }
}

IKeyWordsRankService

using CZBK.ItcastOA.IBLL;
using CZBK.ItcastOA.Model;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CZBK.ItcastOA.BLL
{
    public partial class KeyWordsRankService : BaseService<KeyWordsRank>, IKeyWordsRankService
    {
        /// <summary>
        /// 删除汇总表中的数据
        /// </summary>
        /// <returns></returns>
        public bool DeleteAllKeyWords()
        {
            string sql = "truncate table KeyWordsRank";
           return this.GetCurrentDbSession.ExecuteSql(sql)>0;
        }
        /// <summary>
        /// 向汇总表中插入数据
        /// </summary>
        /// <returns></returns>
        public bool InsertKeyWords()
        {
            string sql = "insert into KeyWordsRank(Id,KeyWords,SearchCount) select newid(),KeyWords,count(*) from SearchDetails where DateDiff(day,SearchDateTime,getdate())<=7 group by KeyWords";
            return this.GetCurrentDbSession.ExecuteSql(sql)>0;

        }
        /// <summary>
        /// 返回热词
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public List<string> GetSearchWord(string str)
        {
            string sql = "select KeyWords from KeyWordsRank where KeyWords like @msg";
          return  this.GetCurrentDbSession.ExecuteSelectQuery<string>(sql, new SqlParameter("@msg",str+"%"));
        }
    }
}

KeyWordsRankService

时间: 2024-11-10 19:45:57

Lucene热词统计的相关文章

热词统计以及Quartz.net的简单使用

一.热词统计 方案一: 设计一个表:ID       KeyWord     Count 当用户再输入框中查询的时候,我们就往表中插入数据,在插入之前首先判断是否已经存在keyword,存在的话,让Count+1 这种方案非常费时 方案二: 表 :ID      Keyword     Count 每次用户输入的时候直接插入,不需要判断是否存在,当进行热词展示的时候,通过Group By语句进行统计 同样比较费时 方案三: 表一明细表:ID   Keyword 表二汇总表:ID   KeyWor

Lucene热词显示并选择

利用Jquery easyui里的autocomplete(1.10.0版本) 的异步请求(remot.html) 添加引用 <script src="~/Scripts/jquery-1.7.1.min.js"></script> <script src="~/Scripts/jquery-ui-1.8.20.min.js"></script> <link href="~/Content/themes

结对第二次—文献摘要热词统计及进阶需求

格式描述 课程:软件工程1916|W(福州大学) 要求:链接 结对学号:221600124&221600127 目标:学习如何使用Github和爬虫工具,体验结对编程 Github项目: 爬虫部分Python代码置于PairProject2的cvpr目录下 PairProject1-C PairProject2-C 代码签入记录: PairProject1 PairProject2 分工: 221600124:编写爬虫部分代码.测试代码并调试 221600127:编写WordCount基础需求及

JFreeChart与AJAX+JSON+ECharts两种处理方式生成热词统计可视化图表

本篇的思想:对HDFS获取的数据进行两种不同的可视化图表处理方式.第一种JFreeChar可视化处理生成图片文件查看.第二种AJAX+JSON+ECharts实现可视化图表,并呈现于浏览器上.   对此,给出代码示例,通过网络爬虫技术,将上传到HDFS的新浪网新闻信息实现热词统计功能,通过图表的柱状图来显示出来. ------> 目录: 1.JFreeChart可视化处理(生成本地图片) [1]HDFS文件读取 [2]JDFreeChart库应用 2.AJAX+JSON+EChart生成可视化图

cvpr论文爬取——热词云展示(WEB)

效果图: Python源码(将数据导入数据库): 1 import re 2 import requests 3 import pymysql 4 5 def insertCvpr(value): 6 db = pymysql.connect("localhost", "root", "root", "cvprlist", charset='utf8') # 连接数据库 7 8 cursor = db.cursor() 9 s

Lucene 6.0 提取新闻热词Top-N

一.需求 给出一篇新闻文档,统计出现频率最高的有哪些词语. 二.思路 关于文本关键词提取的算法有很多,开源工具也不止一种.这里只介绍如何从Lucene索引中提取词项频率的TopN.索引过程的本质是一个词条化的生存倒排索引的过程,词条化会从文本中去除标点符号.停用词等,最后生成词项.在代码中实现的思路是使用IndexReader的getTermVector获取文档的某一个字段的Terms,从terms中获取tf(term frequency).拿到词项的tf以后放到map中降序排序,取出Top-N

大数据热词科普(二)

在上一篇文章中我们给大家介绍了大数据的部分热词科普--人工智能.区块链.图灵测试.在这篇文章中我们给大家介绍一下涉及到大数据的回归分析.贪婪算法.MapReduce.数据挖掘.希望这些知识能够给大家带来帮助. 首先我们说的是回归分析,回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法.运用十分广泛,回归分析按照涉及的变量的多少,分为一元回归和多元回归分析:按照因变量的多少,可分为简单回归分析和多重回归分析:按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析.

11 信息化领域热词分类分析及解释 第五步按目录爬取热词

功能要求为:1,数据采集,定期从网络中爬取信息领域的相关热词 2,数据清洗:对热词信息进行数据清洗,并采用自动分类技术生成自动分类计数生成信息领域热词目录. 3,热词解释:针对每个热词名词自动添加中文解释(参照百度百科或维基百科) 4,热词引用:并对近期引用热词的文章或新闻进行标记,生成超链接目录,用户可以点击访问: 5,数据可视化展示:① 用字符云或热词图进行可视化展示:② 用关系图标识热词之间的紧密程度. 6,数据报告:可将所有热词目录和名词解释生成 WORD 版报告形式导出. 这次完成了按

开源 java CMS - FreeCMS2.4 热词管理

原文地址:http://javaz.cn/site/javaz/site_study/info/2015/38186.html 项目地址:http://www.freeteam.cn/ 热词管理 从FreeCMS 2.3开始支持 通过在模板中调用searchword标签添加热词外,也可以在这里手工添加热词. 热词管理 从左侧管理菜单点击热词管理进入. 添加热词 在热词列表下方点击“添加”按钮. 填写相关属性后点击“确定”按钮即可. 编辑热词 选择需要编辑的热词,然后点击“编辑”按钮. 注意:同时