快速实现 .netFramework中的全文检索(Luncene+盘古分词)

1.引入NuGet:Lucene.Net.Analysis.PanGu
2.内容写入:

//将解析内容存储的地方,这里是:bin\Debug下的index文件夹
        static DirectoryInfo INDEX_DIR = new DirectoryInfo(AppContext.BaseDirectory + "index");
        static Analyzer analyzer = new PanGuAnalyzer(); //MMSegAnalyzer //StandardAnalyzer

        static void Main(string[] args)
        {
            //添加文本内容
            var context = @"中国专业IT社区CSDN (Chinese Software Developer Network) 创立于1999年,致力于为中国软件开发者提供知识传播、在线学习、职业发展等全生命周期服务。
旗下拥有:专业的中文IT技术社区: CSDN.NET;移动端开发者专属APP: CSDN APP、CSDN学院APP;新媒体矩阵微信公众号:CSDN资讯、程序人生、GitChat、CSDN学院、AI科技大本营、区块链大本营、CSDN云计算、GitChat精品课、人工智能头条、CSDN企业招聘;IT技术培训学习平台: CSDN学院;技术知识移动社区: GitChat;人工智能新社区: TinyMind;权威IT技术内容平台:《程序员》+GitChat;IT人力资源服务:科锐福克斯;IT技术管理者平台:CTO俱乐部。";
            //也可指定其他字段信息如:id
            var id = "77889111111111111111";

            IndexWriter iw = new IndexWriter(FSDirectory.Open(INDEX_DIR), analyzer, true, IndexWriter.MaxFieldLength.LIMITED);

            //存储文档添加索引
            Document doc = new Document();
            //指定上方变量:内容存储的key以及解析模式
            doc.Add(new Field("body", context, Field.Store.YES, Field.Index.ANALYZED));
            //指定上方变量:id存储的key以及解析模式
            doc.Add(new Field("id", id, Field.Store.YES, Field.Index.NOT_ANALYZED));

            //将解析完成的内容存储
            iw.AddDocument(doc);

            iw.Commit();
            iw.Optimize();
            iw.Dispose();


            //这里开始输入内容进行检索,输入检索
            while (true)
            {
                Console.Write("请输入要检索的内容: ");
                string keyword = Console.ReadLine();
                Search(keyword);
                Console.WriteLine();
            }
        }

3.输入内容,分词,检索:

 /// <summary>
        /// 检索
        /// </summary>
        /// <param name="keyword">要检索的内容</param>
        static void Search(string keyword)
        {
            IndexSearcher searcher = new IndexSearcher(FSDirectory.Open(INDEX_DIR), true);
            //配置要检索的Key
            QueryParser qp = new QueryParser(Lucene.Net.Util.Version.LUCENE_30,"body", analyzer);
            //对检索内容进行分词
            Query query = qp.Parse(keyword);
            Console.WriteLine("分词结果 {0}", query);

            //查询分词内容,以及设置返回检索结果集数量
            TopDocs tds = searcher.Search(query, 1000);
            Console.WriteLine("检索结果数: " + tds.TotalHits);
            foreach (ScoreDoc sd in tds.ScoreDocs)
            {
                //查询匹配分数
                Console.WriteLine(sd.Score);
                
                Document doc = searcher.Doc(sd.Doc);
                Console.WriteLine(doc.Get("body"));
                Console.WriteLine(doc.Get("id"));
            }
            searcher.Dispose();
        }

4.这里只是介绍了一个快速简单的分词检索功能,如果需要更详细的功能可参考:
Lucene.Net.Analysis.PanGu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值