对于并发,Lucene.Net 遵循以下规则:
1. 允许任意多的读操作并发,即任意数量用户可同时对同一索引做检索操作。
2. 即便正在进行索引修改操作(索引优化、添加文档、删除文档),依然允许任意多的检索操作并发执行。
3. 不允许并发修改操作,也就是说同一时间只允许一个索引修改操作。
Lucene.Net 内部已经对多线程安全进行了处理,打开 IndexWrite.cs / IndexReade.csr 文件,会发现很多操作都使用了 lock 进行多线程同步锁定。只要遵循一定的规则,就可以在多线程环境下安全运行 Lucene.Net。
建议:
1. Directotry、Analyzer 都是多线程安全类型,只需建立一个 Singleton 对象即可。
2. 所有线程使用同一个 IndexModifier 对象进行索引修改操作。
3. IndexWriter/IndexReader/IndexModifier/IndexSearcher 最好使用同一个 Directory 对象,否则多线程并发读写时可能引发 FileNotFoundException。
IndexModifier 对象封装了 IndexWriter 和 IndexReader 的常用操作,其内部实现了多线程同步锁定。使用 IndexModifier 可避免同时使用 IndexWriter 和 IndexReader 时需要在多个对象之间进行同步的麻烦。等所有修改操作完成后,记住调用 Close() 方法关闭相关资源。并不是每次操作都需要调用 Optimize(),可以依据特定情况,定期执行优化操作。
[Lucene]多线程操作建议和[Lucene.Net] 分页显示
相关推荐
- ChatGPT 本地部署及搭建_孟郎郎的博客-CSDN博客
- Cursor 全自动代码生成器?你还没用过?接下来我就来介绍智能 AI 代码生成工具 Cursor 安装和使用 - 掘金
- 【Windows】文件夹被占用删除不掉_Energet!c的博客-CSDN博客
- docfile已损坏 docfile has been corrupted visual studio 2022
- Lodop谷歌浏览器无法打印,解决谷歌浏览器最新chrome94版本CORS跨域问题 - 知乎
- Aspnet Mvc 前后端分离项目手记(二)关于token认证 - 小小爵 - 博客园
- 尝试打开或创建物理文件时,CREATE FILE遇到操作系统错误5 (拒绝访问_麻木博客-CSDN博客
- 智能盘点-钢筋数量AI识别-目标检测实践 - 知乎