首页 > 其他分享 >使用Lucene.net来进行索引和检索

使用Lucene.net来进行索引和检索

时间:2024-10-25 16:21:01浏览次数:7  
标签:检索 Console text writer Lucene WriteLine doc new net

1.去 http://lucenenet.apache.org/  下载lunece.net  文件

2.在项目添加引用Lucene.Net.dll 

class Program
    {
        static void Main(string[] args)
        {

            //索引

            Directory direcotry = FSDirectory.GetDirectory("LuceneIndex");
            Analyzer analyzer = new StandardAnalyzer();
            IndexWriter writer = new IndexWriter(direcotry,analyzer);


            IndexReader red = IndexReader.Open(direcotry);
            int totDocs = red.MaxDoc();
            red.Close();

            //添加文档到索引

            string text = string.Empty;
            Console.WriteLine("输入文本你想要添加到索引:");
            Console.Write(">");

            int txts = totDocs;
            int j = 0;
            while((text=Console.ReadLine())!=string.Empty)
            {
                AddTextToIndex(txts++,text,writer);
                j++;
                Console.Write(">");

            }

            writer.Optimize();
         
            writer.Flush();
            writer.Close();

            Console.WriteLine(j + " lines added, " + txts + " documents total");

            //搜索
            IndexSearcher searcher = new IndexSearcher(direcotry);
            QueryParser parser = new QueryParser("postBody", analyzer);

            Console.WriteLine("输入搜索的文本:");
            Console.Write(">");

            while ((text = Console.ReadLine()) != String.Empty)
            {
                Search(text, searcher, parser);
                Console.Write(">");
            }

            //关闭资源
            searcher.Close();
            direcotry.Close();
        }

        //搜索
        private static void Search(string text,IndexSearcher searcher,QueryParser parser)
        {   //条件
            Query query = parser.Parse(text);
 
            //搜索
            Hits hits = searcher.Search(query);

            //显示结果
            Console.WriteLine("搜索 '" + text + "'");
            int results = hits.Length();
            Console.WriteLine("发现 {0} 结果", results);

            for (int i = 0; i < results; i++)
            {
                Document doc = hits.Doc(i);
                float score = hits.Score(i);
                Console.WriteLine("--结果 num {0}, 耗时 {1}", i + 1, score);
                Console.WriteLine("--ID: {0}", doc.Get("id"));
                Console.WriteLine("--Text found: {0}" + Environment.NewLine, doc.Get("postBody"));
            }
        }


        //添加文档到索引中
        private static void AddTextToIndex(int txts,string text,IndexWriter writer)
        {
            Document doc = new Document();
            doc.Add(new Field("id",text.ToString(),Field.Store.YES,Field.Index.UN_TOKENIZED));
            doc.Add(new Field("postBody",text,Field.Store.YES,Field.Index.TOKENIZED));
            writer.AddDocument(doc);

        }
    }

标签:检索,Console,text,writer,Lucene,WriteLine,doc,new,net
From: https://www.cnblogs.com/guangzhiruijie/p/18502811

相关文章

  • 几张图带你了解.NET String
    String字符串作为一种特殊的引用类型,是迄今为止.NET程序中使用最多的类型。可以说是万物皆可string因此在分析dump的时候,大量字符串对象是很常见的现象string的不可变性string作为引用类型,那就意味是可以变化的.但在.NET中,它们默认不可变。也就是说行为类似值类型,实际上是......
  • Netty、Go、Apache Tomcat、grpc-go、jetty、nghttp2、Apache Traffic Server是什么
    这些都是与网络编程和服务器应用相关的技术,下面我将分别简要介绍它们:Netty:Netty是一个异步事件驱动的网络应用程序框架,用于快速开发高性能、高可靠性的网络服务器和客户端程序。它支持多种协议,包括HTTP、HTTPS、FTP、SMTP等,广泛应用于游戏、移动、物联网、大数据等领域。......
  • 【C#】 .NET Framework 中使用JSON
    因为System.Text.Json是.NETCore和.NET5+中引入的命名空间。如果你使用的是.NETFramework,你需要使用Newtonsoft.Json库来处理JSON。 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;u......
  • .NET使用OllamaSharp实现大模型推理对话的简单演示
    https://www.cnblogs.com/weskynet/p/18497936 前提条件:请确保你本地已经安装了ollama以及有关本地离线模型。或者已有远程模型环境等。如果没有,请自行部署。如果需要帮助,可以文末获取联系方式咨询。由于部署离线大模型过于简单,在线资料也很多,我就省略这个步骤了。 创建一个......
  • 机床 发那科 转 profinet IO 项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 准备工作 24 网关采集发那科机床数据 25 用PROFINETIO协议转发数据 56 案例总结 71 案例说明设置网关采集发那科机床数据把采集的数据转成profinetIO协议转发给其他系统。2 VFBOX网关工作原理VFBOX网关是协议转换网关,是把......
  • Unet网络搭建Day1
    Pycharm内搭建虚拟环境:一、将PyCharm中的终端运行前面的PS修改成当前环境解决方法:只需要在pycharm的设置中修改一些terminal的环境即可,具体步骤如下:1.打开pycharm中的settings;2.找到Terminal选项;3.将shellpath的位置改为cmd.exe;4.点击ok;5.重启pycharm即可。二、wandb......
  • 谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc
    本文基于Netty4.1.112.Final版本进行讨论在之前的Netty系列中,笔者是以4.1.56.Final版本为基础和大家讨论的,那么从本文开始,笔者将用最新版本4.1.112.Final对Netty的相关设计展开解析,之所以这么做的原因是Netty的内存池设计一直在不断地演进优化。在4.1.52.Final......
  • .NET 开源扁平化、美观的 C/S 控件库
    前言给大家推荐一个优秀的控件集,它基于.NETFramework4.0,采用纯原生开发,不包含任何第三方插件或类库。该控件集涵盖了常用的窗体和控件,同时还包括工业工具和类Web控件。使用这套控件库我们可以快速的搭建一个漂亮的应用程序。项目介绍HZHControls包含了200多个控件、窗......
  • Agent.exe:让Claude 3.5 Sonnet控制你的电脑
    简介Agent.exe是一个开源的Electron应用程序,它允许Claude3.5Sonnet直接控制你的本地计算机。这个项目的特色在于它的操作界面简洁,并且对Firefox浏览器有特别的优化支持。功能亮点简单易用:通过一个简单的Electron应用,让Claude3.5Sonnet接管你的电脑。操作直......
  • DCN-Digital Communications and Networks
    @目录一、征稿简介二、重要信息三、服务简述四、投稿须知一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述人工智能原生网络6G通信网络中的人工智能自主网络管理网络功能虚拟化(NFV)软件定义网络(SDN)网络机器学习无线联合学习动态频谱管理网......