排序瓶頸,排序是乙個非常占用資源的功能,尤其是在資料量特別多的情況下,排序就顯示尤為突出,經過測試發現,排序主要和搜尋出的資料量有關,比如說搜尋出的資料是1w條和1k條的排序是不一樣的,但是和索引檔案的資料量關係不大,好搜尋100m和1g的關係不大,但是搜尋1g的也會慢,這是由於搜尋資料量有關,而不是排序的關係,因為排序是在搜尋完成後再進行的,是對搜尋結果進行了乙個遍歷。lucene對不同的分詞也有不同的效果,經過測試發現lucene用系統自帶的標準分詞和簡單分詞搜尋的速度較快,使用了中文分詞的速度較慢。
時間範圍搜尋,使用的是rangequery類進行的,測試時沒有問題,但用實際資料進行搜尋時出現溢位的情況,通過查閱相關資料知道,rangequery最大子查詢為1024個,可以任意增大,但付出的代價是效能上的損失,增大到10240時也有溢位的現象,進一步發現可以使用語法的方法實現時間段的搜尋,字段:[ start to end ],而且此方法沒有溢位,不丟擲異常,效快,經過測試發現,時間節省百分之五十,在此要說明的是booleanquery有乙個setmaxclausecount函式,用此函式將子查詢設定的大些也會減少程式出錯的機率,但是付出的就是效能上的降低,如設定為10240時,如果要排序的資料量超過10240個時也將會出現溢位的現象,也以在此建議使用上面說的語法來解決時間段的方式。
記憶體索引ramdirectory,經過測試和資料得到,記憶體索引搜尋的效能提高不大,但是對於建立索引的效能確是非常有幫助,經過測試發現,記憶體索引在有些時候甚至會比磁碟索引的搜尋效率還要慢,但是建立索立大量的索引時確有質的提公升,建議建立大量索引時先將索引寫入記憶體索引,當記憶體索引達到一定量時再將記憶體索引一次性寫入磁碟,但對長時間提供穩定的效能有很大幫助,可以減小硬碟的瓶頸對搜尋的影響
查詢類:query查詢有相當多的子類,它分分別實再不同的功能,請檢視lucene的官方文件進行研究,其中模糊查詢和相似查詢相當費時,如果使用者想要禁用掉這兩個查詢可以用如下的**解決:
public class xiluqueryparser extends queryparser
/**禁用模糊搜尋
*/protected query getfuzzyquery(string field,
string termstr,
float minsimilarity)
throws parseexception
/**禁止萬用字元搜尋
*/protected query getwildcardquery(string field,
string termstr)
throws parseexception
}將queryparser.parser(title)換為xiluqueryparser.parser(title)即可。
搜尋引擎 lucene
lucene簡介 搜尋引擎的幾個概念 倒排 倒排索引 inverted index 也稱為反向索引,是搜尋引擎中最常見的資料結構,幾乎所有的搜尋引擎都會使用到倒排索引,它將文件中的詞作為關鍵字,建立詞與文件的對映關係,通過對倒排索引的檢索,可以根據詞快速獲取包含這個詞的文件列表,這對於搜尋引擎來說至...
搜尋引擎 lucene 例子
最近專案中要用到全文搜尋,所以在網上搜了下,找到了lucene 學習下 lucene是乙個很容易上手的搜尋引擎框架,傳統的搜尋引擎,涉及到爬蟲,也就是爬取網頁,然後對網頁進行加工,也就是索引,最後用於搜尋,lucene這個框架可以很方便的幫你做到後面兩個步驟,也就是索引和搜尋!本文嘗試通過乙個例子,...
搜尋引擎的一些高階搜尋指令
減號結果更精準 有時候我們搜尋乙個詞的時候卻返回了很多不想要的結果,搜尋引擎認為很多詞和你搜尋的詞有一定的相關性就全部返回了搜尋結果,這樣就會給我們找到目標頁面帶來很大的影響。這時就能使用減號這個高階指令,比如搜尋 糖半甜 飲品 返回的結果如下圖所示,需要注意的是在減號前面一定要有空格,減號後邊緊跟...