Lucene.Net最轻量但需手动管理索引生命周期须单例复用IndexWriter、显式设字段索引、用中文分词器、调Commit()提交否则易出锁异常或搜不到数据。用 Lucene.Net 做本地全文搜索最轻量但得自己管索引生命周期直接上手 Lucene.Net 是 C# 里最可控的全文搜索方案尤其适合中小数据量、离线或内网场景。它不依赖外部服务编译后就一个 DLL但代价是你得亲手创建 IndexWriter、管理 Directory比如 FSDirectory.Open()、定时重建或增量更新索引——没人帮你做这些。常见错误是把索引目录放在临时路径或没加锁导致 LockObtainFailedException或者写完不调 writer.Commit()搜不到新数据。IndexWriter 必须单例复用不能每次搜索都 new 一个字段要显式声明为 FieldType 并设 IsIndexed true否则建不出倒排索引中文分词必须引入 Lucene.Net.Analysis.Cn 或 Lucene.Net.Analysis.Stempel默认 StandardAnalyzer 对中文基本无效查询时用 QueryParser.Parse()别手拼 TermQuery否则不支持 AND/OR 和通配符连 Elasticsearch 要走 HTTPNest 客户端比原生 HttpClient 少踩一半坑如果数据量大、需要高可用或实时性Elasticsearch 是更现实的选择。C# 端别自己封装 JSON 请求直接用官方维护的 Nest 客户端——它自动处理序列化、连接池、重试和版本兼容比如 ES 8.x 的 IndexName 默认小写Nest 会帮你转。典型翻车点ES 8 默认启用 HTTPS Basic Auth但很多人漏配 ConnectionSettings 里的 BasicAuthentication结果卡在 401 Unauthorized或者用错 SearchDescriptor 写法把 Match 写成 Term搜“北京”匹配不到“北京市”。初始化 ElasticClient 时传入 new ConnectionSettings(new Uri(https://localhost:9200))别漏协议和端口索引名必须全小写ES 8 不接受大写字母Nest 默认会转但自定义名要手动检查字段映射要用 [Text(Analyzer ik_smart)] 这类特性标注否则中文分词器不生效批量写入用 client.Bulk()别循环调 Index()否则吞吐掉 10 倍以上数据库自带全文检索SQL Server 的 CONTAINS 只能查表且中文需额外配置如果数据就在 SQL Server 里又不想引入新组件可以试试内置全文索引。但它不是“开箱即用”必须先用 CREATE FULLTEXT CATALOG 建目录再用 CREATE FULLTEXT INDEX 指定列最后才能用 CONTAINS 或 FREETEXT 查询。 arXiv Xplorer ArXiv 语义搜索引擎帮您快速轻松的查找保存和下载arXiv文章。