lucene的學習 範圍查詢

2021-05-27 23:07:18 字數 654 閱讀 9683

對於lucene的範圍查詢,可以使用rangquery,或者使用rangfilter。

但對於rangquery有個缺點,可能導致異常toomanyclause異常。因為對於不同的query,最後都是轉化為termquery.

而rangquery,就是將這個範圍內的所有term(每乙個term就是乙個booleanquery),他們之間以or 關係。如果這個範圍中的term太多,就會導致太多的boolean查詢,這樣有可能丟擲toomanyclause異常。

因為內部是每個booleanquery查詢出的結果進行集合運算,如果太多的集合運算會導致記憶體溢位。而且效能也不好。

這樣,可以採用過濾查詢方法filterquery來處理範圍查詢。這個計算會多一些,但是因為filterquery可以快取重複利用,這樣效能可以更好,對於某個範圍內的查詢的效能就可以解決。

所以一般範圍查詢,最好使用過江查詢,對於solr,這種範圍查詢都可以使用如:fq=price:[ 10 to 30]

先有對這個欄位price的值快取,快取的結構可以看lucene的fieldcache,可以在fieldcache中讀取符合的值的docid放入乙個docidset點陣圖中。並將結果快取起來,下次再查詢的時候可以使用。。具體的優化得再檢視一下源**的實現 。。當然只要懂得了lucene的結構,有些優化還是跟業務情況相結合。。

lucene數值型別的索引和範圍查詢分析

query q numericrangequery.newlongrange idfield 1l,10l,true,true 對數值型別建索引的時候,會把數值轉換成多個lexicographic sortable string 然後索引成 trie 字典樹結構。例如 假設num1 拆解成 a ab...

Lucene中的範圍搜尋

前兩天做有關lucene的範圍搜尋,覺得應該很簡單,因為之前做過lucene的排序。但一做就發現不那麼回事,做排序程式幾乎不需要改動,但範圍搜尋完全不同。下面就3個方面 整數,浮點數,日期 來說 前提 使用lucene1.9.1,將整數,浮點數和日期全部以如下方式建索引 newfield key,v...

Lucene中的範圍搜尋

前兩天做有關lucene的範圍搜尋,覺得應該很簡單,因為之前做過lucene的排序。但一做就發現不那麼回事,做排序程式幾乎不需要改動,但範圍搜尋完全不同。下面就3個方面 整數,浮點數,日期 來說 前提 使用lucene1.9.1,將整數,浮點數和日期全部以如下方式建索引 newfield key,v...