1. 程式人生 > >Lucene入門與介紹

Lucene入門與介紹

當需要搜尋指定時間範圍內的結果時,可以:
1
、用RangeQuery,設定範圍,但是RangeQuery的實現實際上是將時間範圍內的時間點展開,組成一個個BooleanClause加入到 BooleanQuery中查詢,因此時間範圍不可能設定太大,經測試,範圍超過一個月就會拋BooleanQuery.TooManyClauses,可以通過設定 BooleanQuery.setMaxClauseCount(intmaxClauseCount)擴大,但是擴大也是有限的,並且隨著maxClauseCount擴大,佔用記憶體也擴大。
2
、用RangeFilter代替RangeQuery,經測試速度不會比
RangeQuery慢,但是仍然有效能瓶頸,查詢的90%以上時間耗費在RangeFilter,研究其原始碼發現RangeFilter實際上是首先遍歷所有索引,生成一個BitSet,標記每個document,在時間範圍內的標記為true,不在的標記為false,然後將結果傳遞給Searcher查詢,這是十分耗時的。
3
、進一步提高效能,這個又有兩個思路:
a
、快取Filter結果。既然RangeFilter的執行是在搜尋之前,那麼它的輸入都是一定的,就是IndexReader,而 IndexReader是由Directory決定的,所以可以認為RangeFilter的結果是由範圍的上下限決定的,也就是由具體的
RangeFilter物件決定,所以我們只要以RangeFilter物件為鍵,將filter結果BitSet快取起來即可。lucene API已經提供了一個CachingWrapperFilter類封裝了Filter及其結果,所以具體實施起來我們可以cacheCachingWrapperFilter物件,需要注意的是,不要被CachingWrapperFilter的名字及其說明誤導, CachingWrapperFilter看起來是有快取功能,但的快取是針對同一個filter的,也就是在你用同一個filter過濾不同 IndexReader時,它可以幫你快取不同IndexReader
的結果,而我們的需求恰恰相反,我們是用不同filter過濾同一個 IndexReader,所以只能把它作為一個封裝類。
b
、降低時間精度。研究Filter的工作原理可以看出,它每次工作都是遍歷整個索引的,所以時間粒度越大,對比越快,搜尋時間越短,在不影響功能的情況下,時間精度越低越好,有時甚至犧牲一點精度也值得,當然最好的情況是根本不作時間限制。

相關推薦

Lucene入門介紹

當需要搜尋指定時間範圍內的結果時,可以: 1、用RangeQuery,設定範圍,但是RangeQuery的實現實際上是將時間範圍內的時間點展開,組成一個個BooleanClause加入到 BooleanQuery中查詢,因此時間範圍不可能設定太大,經測試,範圍超過一個月就會拋BooleanQuery.Too

【XSS技巧拓展】————5、跨站的藝術-XSS入門介紹

什麼是XSS? XSS全稱跨站指令碼(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故縮寫為XSS,比較合適的方式應該叫做跨站指令碼攻擊。 跨站指令碼攻擊是一種常見的web安全漏洞,它主要是指攻擊者可以在頁面

資源 | 深度學習課程入門介紹

【1】Andrew NG Deep Learning.ai http://deeplearning.ai/網易雲課堂(中文字幕):http://mooc.study.163.com/smartSpec/detail/1001319001.htm推薦理由:Andrew Ng老師

爬蟲初步:入門介紹

1.什麼是爬蟲   經常訪問網路的朋友可能需要開啟各種各樣的網頁。網頁與網頁、網頁內部之間的相互連線都是通過一種叫做超連結的東西進行關聯的,這種超連結,專業術語叫做統一資源定位符,英文縮寫為url,也就是我們常說的網址。 使用者通過在瀏覽器中輸入url向伺服器訪問請求,使用的是一種叫做http或者

Android測試工具 UIAutomator入門介紹

  UI Automator 測試工具定義以及用途           UI Automator 測試框架提供了一組 API,用於構建在使用者應用和系統應用上執行互動的介面測試。通過 UI Automator API,

機器學習入門 - 1. 介紹決策樹(decision tree)

recursion machine learning programmming 機器學習(Machine Learning) 介紹與決策樹(Decision Tree)機器學習入門系列 是 個人學習過程中的一些記錄與心得。其主要以要點形式呈現,簡潔明了。1.什麽是機器學習?一個比較概括的理解是:

【轉載】Qt入門提高:K02-01通過簡單exe介紹pro基本配置

版權宣告 --------------------------------------------------------------------------------------------------------------------- 作者: 女兒叫老白

Centos 7 Vagrant 簡單入門實戰介紹

Vagrant 是一個基於 Ruby 的工具,用於建立和部署虛擬化開發環境。它使用 Oracle 的開源 VirtualBox 虛擬化系統,使用 Chef 建立自動化虛擬環境(百度百科)。可以利用 Vagrant 搭建小小的叢集環境,用於學習例如 Ansible

(最短路徑算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理介紹

void empty borde fast 默認 grand else 理解 scan 這一篇博客以一些OJ上的題目為載體。整理一下最短路徑算法。會陸續的更新。。。 一、多源最短路算法——floyd算法 floyd算法主要用於求隨意兩點間的最短路徑。也成

JS 數據類型入門typeof操作符

log not ont obj bject string ole 布爾值 字符串 標準的數據類型劃分:   基本類型: number(數字)、string(字符串)、undefined、boolean(布爾值)、null(空對象)//空對象與非空對象,最大的區別就是不能進

Lucene入門學習

測試 oda 上下 可選 有意義 ioe director exe directory 參考博客: http://blog.csdn.net/ayi_5788/article/category/6348409 分頁: http://blog.csdn.net/hu94816

caffe2 安裝介紹

時間 upd exp 標註 nds target over sym star http://blog.csdn.net/yan_joy/article/details/70241319 標簽: 深度學習 2017-04-19 15:31 5970人閱讀 評論(0)

【11】 Express安裝入門模版引擎ejs

scrip png js文件 是我 use 處理 ica direct 配置 前言 Express簡介和安裝 運行第一個基於express框架的Web 模版引擎 ejs express項目結構 express項目分析 app.set(name,value) app

Spring4+SpringMVC+Hibernate4整合入門實例

type 解析 .class -m .config ise pri generated driver 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:

Git——新手入門上傳項目到遠程倉庫GitHub

height repo 刷新 clas key 兩個 authent 提交 文件目錄 Git:先進的分布式版本控制系統,一個開源式的分布式版本控制工具。 Git安裝 在Windows操作系統下,訪問Git下載地址https://git-for-windows.git

免費的Lucene 原理代碼分析完整版下載

一個個 圖片 重新 修改時間 結果 參數 擴展 提取 要點 Lucene是一個基於Java的高效的全文檢索庫。那麽什麽是全文檢索,為什麽需要全文檢索?目前人們生活中出現的數據總的來說分為兩類:結構化數據和非結構化數據。很容易理解,結構化數據是有固定格式和結構的或者有限長度的

虛擬化技術入門實踐--庖丁解牛

虛擬化hypervisor 之於操作系統類似於操作系統之於進程。它們為執行提供獨立的虛擬硬件平臺,而虛擬硬件平臺反過來又提供對底層機器的虛擬的完整訪問。但並不是所有 hypervisor 都是一樣的,這是件好事,因為 Linux 就是以靈活性和選擇性著稱。本文首先簡要介紹虛擬化和 hypervisor,然後探

css3彈性盒模型flex快速入門上手1

nes -1 相互 title 布局 viewport alt 默認值 lin 一、什麽是flex? flex是css3中引入的一種布局方式,可以非常靈活高效控制元素的排列與對齊方式,大多數人稱之為彈性布局. 二、怎麽使用flex? 任何一個容器都可以指定為flex布

最新 angular 5 入門提高

強調 pmod 團隊 jit編譯器 瀏覽器支持 lar 等待時間 not 手機桌面 一、概述 盡管被稱為Angular5,實際上它只是這個誕生於2012年的前端框架的的第四個版本: 看起來差不多半年就發布一個新版本,不過實際上從重寫的版本2開始,開發 接口與核心思想就穩定

Nhibernate入門demo

relation 而且 如果 std 自動 pin nbsp 研究 www. 學習和使用Nhibernate已經很久了,一直想寫點東西和大家一起學習使用Nhibernate。博客園裏也有很多大牛寫了很多關於Nhibernate入門的文章。其中:李永京的博客http://ww