<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                轉載請注明出處:[http://blog.csdn.net/xiaojimanman/article/details/43052829](http://blog.csdn.net/xiaojimanman/article/details/43052829) 前面我們介紹了Analyzer和Query,這篇我們就開始該系列最后一個類IndexSearcher的搜索API介紹,Lucene中重點API不止這里介紹的這一點,還有IndexWriter、Field、Highlighter等,這些就不在這一部分做介紹了,如若案例中用到的話,再做簡單介紹。 查看Lucene4.3.1中IndexSearcher的API請[點擊這里](http://lucene.apache.org/core/4_3_1/core/org/apache/lucene/search/IndexSearcher.html),關于搜索的方法如下圖: ![](https://box.kancloud.cn/2016-02-22_56ca7bee8f08d.jpg) 從上圖幾個方法可以看出,有幾個重點類需要介紹下:Query(上篇博客已介紹)、Filter、Sort、ScoreDoc、Collector **Collector** Collector主要用來對搜索結果做收集、自定義排序、過濾等,在Lucene4.3.1的API中,有兩個搜索方法用到了Collector,但是其下面都有一句Lower-level search API(低級別的搜索API),如果沒有非用不可的需求,盡量還是使用其他方法。 **Filter** Filter主要是做篩選條件的,用于指定哪些文檔可以在搜索結果中,這個自己使用的并不是太多,查詢了一些資料,介紹說有Filter的檢索過程是先對數據源做篩選預處理(Filter中指定的),然后將篩選的結果交給查詢語句,如果是這樣的話,使用Filter的代價將會很大,他的查詢耗時可能會提高數倍。個人認為也沒有必要使用Filter,如果真的需要對結果做篩選,可以把這些篩選條件合并到Query中,而沒有必要創建一個Filter對象。 **Sort** Sort在檢索方法中指定排序方式,相當于數據庫中的order by,創建方式如Sort sort = new Sort(new SortField("time", Type.LONG, true)),這里的SortField構造方法中的三個參數分別代表域名、域數據類型、排序方式(true降序/false升序),這里的例子只是按照一個域進行排序,如果多個域可以直接在構造方法中添加,如sort = new Sort(new SortField("time", Type.LONG, true), new SortField("star", Type.INT, false))。 **ScoreDoc** 從上圖方法中,searchAfter方法中使用到ScoreDoc,該方法主要用在分頁查詢中,當然也可以用search方法替代,但是有一種情況是無法替代的,比如查詢第一頁10條數據,但由于推廣或廣告等需求,需要在其中添加幾條(具體未知)其他記錄,但是前端只能展示10條數據,這樣該頁的最后幾條數據就沒有辦法顯示,但在下一頁中又想顯示這幾條數據,這樣使用seach方法實現就有點困難,事例需求圖形描述如下: ![](https://box.kancloud.cn/2016-02-22_56ca7beea3e18.jpg) searchAfter在實現上述的需求時,在取下一頁數據時,只需要將上次查詢的最后一個ScoreDoc告訴它即可,它可以直接從該條數據開始查詢下一頁的數據。 檢索方法中涉及到的類也算介紹結束了,現在就將這些組裝起來,以最簡單的一個檢索方法為例search(Query query, int n),該方法實現的是檢索符合條件query的前N條文檔,這里的排序采用的是默認的相關度排序;這樣方法中添加其他的對象,就完成了其對應的功能,如search(Query query, int n, Sort sort),該方法指定了其排序方式。這篇博客主要介紹IndexSearcher的搜索相關API,所以這里就不再寫測試demo了。 **IndexWriter** 原計劃第一部分到現在應該結束的,也不對其他內容做相關介紹的,但讀者的反饋說索引的增刪改的方法不是太清楚,那這里就先簡單的題以下其方法,自己感興趣的可以先實現下,添加新文檔到索引中這個在[創建索引這篇博客](http://blog.csdn.net/xiaojimanman/article/details/42872711)中已經提到,這里就不再介紹。 修改索引 ~~~ public boolean updateDocument(Term term, Document doc){ try { indexWriter.updateDocument(term, doc); return true; } catch (IOException e) { e.printStackTrace(); return false; } } ~~~ 這里的term指定了要修改的索引文檔,一般這里使用索引中文檔的唯一標識。 刪除索引 ~~~ public boolean deleteDocument(Query query){ try { indexWriter.deleteDocuments(query); return true; } catch (IOException e) { e.printStackTrace(); return false; } } ~~~ 這里的query指定了文檔需要滿足的條件,當然也有方法可以直接清空索引 ~~~ public boolean deleteAll(){ try { indexWriter.deleteAll(); return true; } catch (IOException e) { e.printStackTrace(); return false; } } ~~~ 上述的這些操作,都需要執行indexWriter.commit()之后才會保存,否則是不會有效的。 注:第一部分:lucene的基本原理以及API簡單接口的使用 到這里就結束了,按照數據流向下一部分應該介紹數據采集的,但為了在介紹搜索后臺部分不忘記lucene的相關知識,這里就把搜索后臺部分稍微提前一點。在開始搜索后臺部分之前,我也會在1-2篇博客中,介紹一下這個案例的demo以及后臺的系統架構,在對整個需求有一定的了解基礎之上,我們再開始案例開發。如若對個人的博客在排版或者內容等方面有相關的意見,真心希望在評論中可以提及,我也會積極采納各位的建議,把這一個系列的博客做好,大家共同進步。 ps:最近發現其他網站可能會對博客轉載,上面并沒有源鏈接,如想查看更多關于[ 基于lucene的案例開發](http://blog.csdn.net/xiaojimanman/article/category/2841877) 請[點擊這里](http://blog.csdn.net/xiaojimanman/article/category/2841877)。或訪問網址http://blog.csdn.net/xiaojimanman/article/category/2841877
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看