lucene中ParallelReader.java使用中的難點
需求:
表a 一對一 表b
表a 做到索引中後不需要頻繁的修改
表b 做到索引中後會頻繁的修改
索引查詢時需要結合表a和表b中的欄位進行連線查詢
org.apache.lucene.index.ParallelReader的作用
有時對於一個Document(包含Field比較多)來說,有那麼一兩個Field會被頻繁地修改,而另一些Field則不會。這時可以將頻繁修改的Field和其他Field分開存放,而在搜尋時同時檢索這兩部分Field而提取出一個完整的Document。
這要求兩個索引包含的Document的數量必須相同, 在建立索引的時候,可以同時建立多個IndexWriter,將一個Document根據需要拆分成多個包含部分Field的Document,並將這些Document分別新增到不同的索引。
而在搜尋時,則必須藉助ParallelReader類來整合。
Directory dir1=FSDirectory.getDirectory(new File(INDEX_DIR1),false);
Directory dir2=FSDirectory.getDirectory(new File(INDEX_DIR2),false);
ParallelReader preader=new ParallelReader();
preader.add(IndexReader.open(dir1));
preader.add(IndexReader.open(dir2));
IndexSearcher searcher=new IndexSearcher(preader);
Directory dir1=FSDirectory.getDirectory(new File(INDEX_DIR1),false);Directory dir2=FSDirectory.getDirectory(new File(INDEX_DIR2),false)arallelReader preader=new ParallelReader();preader.add(IndexReader.open(dir1));preader.add(IndexReader.open(dir2));IndexSearcher searcher=new IndexSearcher(preader);
之後的操作和一般的搜尋相同。
正好可以滿足以上需求
可是如何保證兩個索引檔案中 Document的順序是對應的,第一次新建的時候沒問題(可以保證索引中Document的數量和順序一致),可是當對錶b對應的索引進行修改時,問題就暴露出來了,我們知道修改索引的做法是先刪除後插入的,這樣一來segement中的文件順序就變了,如何保證兩個表對應的索引檔案的文件順序一致,是個大難題,請有經驗的高手慷慨解難,謝謝!
表a 一對一 表b
表a 做到索引中後不需要頻繁的修改
表b 做到索引中後會頻繁的修改
索引查詢時需要結合表a和表b中的欄位進行連線查詢
org.apache.lucene.index.ParallelReader的作用
有時對於一個Document(包含Field比較多)來說,有那麼一兩個Field會被頻繁地修改,而另一些Field則不會。這時可以將頻繁修改的Field和其他Field分開存放,而在搜尋時同時檢索這兩部分Field而提取出一個完整的Document。
這要求兩個索引包含的Document的數量必須相同, 在建立索引的時候,可以同時建立多個IndexWriter,將一個Document根據需要拆分成多個包含部分Field的Document,並將這些Document分別新增到不同的索引。
而在搜尋時,則必須藉助ParallelReader類來整合。
Directory dir1=FSDirectory.getDirectory(new File(INDEX_DIR1),false);
Directory dir2=FSDirectory.getDirectory(new File(INDEX_DIR2),false);
ParallelReader preader=new ParallelReader();
preader.add(IndexReader.open(dir1));
preader.add(IndexReader.open(dir2));
IndexSearcher searcher=new IndexSearcher(preader);
Directory dir1=FSDirectory.getDirectory(new File(INDEX_DIR1),false);Directory dir2=FSDirectory.getDirectory(new File(INDEX_DIR2),false)arallelReader preader=new ParallelReader();preader.add(IndexReader.open(dir1));preader.add(IndexReader.open(dir2));IndexSearcher searcher=new IndexSearcher(preader);
之後的操作和一般的搜尋相同。
正好可以滿足以上需求
可是如何保證兩個索引檔案中 Document的順序是對應的,第一次新建的時候沒問題(可以保證索引中Document的數量和順序一致),可是當對錶b對應的索引進行修改時,問題就暴露出來了,我們知道修改索引的做法是先刪除後插入的,這樣一來segement中的文件順序就變了,如何保證兩個表對應的索引檔案的文件順序一致,是個大難題,請有經驗的高手慷慨解難,謝謝!
相關文章
- Lucene原始碼解析--Lucene中的CloseableThreadLocal類原始碼thread
- 深度解析原型中的各個難點原型
- svg 使用中的疑惑點SVG
- sql中的*的使用注意點SQL
- 機會管理在CRM系統中的難點解析
- Lucene中建立索引的效率和刪除索引的實現索引
- 面試高頻題:講講專案中的技術難點?面試
- 教你如何攻克Kotlin中泛型型變的難點(上篇)Kotlin泛型
- 教你如何攻克Kotlin中泛型型變的難點(下篇)Kotlin泛型
- lucene入門使用
- 機器學習中的維度災難機器學習
- JS中的類很難嗎?JS
- 在JAVA中將Elasticsearch索引載入到Lucene APIJavaElasticsearch索引API
- html中的錨點介紹和使用HTML
- Linux 中 WIFI 和熱點的使用LinuxWiFi
- lucene學習總結篇--lucene全文檢索的基本原理和lucene API簡單的使用API
- 線上教育程式開發中遇到的難點是什麼?如何解決?
- 教你如何攻克Kotlin中泛型型變的難點(實踐篇)Kotlin泛型
- lucene、lucene.NET詳細使用與優化詳解優化
- [譯] Xcode 中的使用者斷點XCode斷點
- RPC 使用中的一些注意點RPC
- ERP實施過程中的難點分析與對策探討(轉)
- python中smtplib使用注意點Python
- CSS 滾屏效果,要比想象中的難CSS
- 使用介面實現RecyclerView中的item點選事件View事件
- Swift中URL處理中的注意點Swift
- lucene(一) lucene一些概念的理解
- 學JS的難點JS
- Game with points(數學,難度中)GAM
- 關於使用iview中Table元件的一點小技巧View元件
- 快速技術成長:提煉和總結專案中的技術重難點
- Qt中的焦點事件QT事件
- Vue中的點點滴滴在此記錄Vue
- java中static使用之靜態方法注意點Java
- 關於難點的思考
- 深度學習的難點深度學習
- 關於Laravel中的Redis如何使用Lua的一點記錄LaravelRedis
- Oracle中的使用者資源限制的幾點說明Oracle