2011-01-25 95 views
4

有沒有辦法來限制從查詢文本字段的文本量的文本字段的大小?這裏有一個快速的場景....Solr的查詢 - 有沒有辦法以限制響應

我有2個字段:

  • 的docId - INT
  • 文本 - 字符串。

我將查詢docId字段,並希望從200個字符的文本字段中獲取「預覽」文本。平均而言,文本字段有600-2000個字符,但我只需要預覽。

例如。 [mySolrCore]/select?q = docId:123 & fl = text

有沒有辦法做到這一點,因爲如果我只需要一個小預覽就看不到整個文本字段?

我不看命中高亮因爲我不是尋找文本字段中的特定文本,但如果存在hl.fragsize參數相似functionaly這將是偉大的!

希望有人能指點我正確的方向!

乾杯!

+0

http://stackoverflow.com/questions/3452665/how-do-i-return-only-a-truncated-portion-of-a-field-in-solr – Rifat 2013-06-28 15:35:43

回答

4

你將不得不測試此變通而不只是返回整場的表現,但它可能對你的情況下工作。基本上,打開不匹配字段上的突出顯示,然後使用備用字段返回所需的有限數量的字符。

http://solr:8080/solr/select/?q=*:*&rows=10&fl=author,title&hl=true&hl.snippets=0&hl.fl=sku&hl.fragsize=0&hl.alternateField=description&hl.maxAlternateFieldLength=50

注:

  • 確保您的備用字段不會在字段列表中存在(佛羅里達州)的參數
  • 確保您的高亮場(hl.fl)實際上並不包含您要搜索的文字

我發現運行熒光筆的CPU成本有時超過CPU成本和bandwi dth只是返回整個領域。你必須嘗試。

0

您可以添加其他字段一樣摘錄/摘要,其中包括在文本中的第200個字符,並返回該字段,而不是

+0

日Thnx ...沒想到的,但我們的索引大小已經是幾十兆字節,所以這隻會增加大小,這是不是一個選項,我很害怕... – Dan 2011-01-25 11:35:10

+1

如果你已經在terra字節,增加幾個千兆字節不會傷害 – ajreal 2011-01-25 13:15:49

+2

更多關於那。根據我的經驗,臃腫的索引通常是這樣的,因爲字段存儲在索引中是不必要的。 Lucene是您的搜索索引,而不是您的數據倉庫。如果你不在Lucene中存儲不是絕對必要的東西,你會大大減少索引的大小。您應該索引需要搜索的字段,然後存儲用於從另一個存儲介質中獲取原始文檔的ID或URL。否則,您正在多次複製您的數據,最終得到的答覆如「我們不能這樣做,因爲我們已經有太多數據」 – rfeak 2011-01-25 19:22:58

3

我決定把我的評論變成答案。

我建議你不要你的文本數據存儲在Solr的/ Lucene的。只索引數據進行搜索並存儲唯一的ID或URL以識別文檔。文檔的內容應該從獨立的存儲系統中獲取。

Solr/Lucene針對搜索進行了優化。它們不是您的數據倉庫或數據庫,不應該以這種方式使用它們。當您將更多數據存儲在Solr中時,會對整個搜索系統產生負面影響。您膨脹了索引的大小,增加了主服務器和從服務器之間的複製時間,複製了只需要一個副本的數據,並浪費了文檔緩存上的緩存內容,這些內容應該用於加快搜索速度。

所以,我會建議2件事情。

首先,優化,從搜索索引中刪除的文本存儲整。從保存文檔(如文件服務器)進行優化的輔助系統中獲取預覽文本和整個文本。

其次,次優的,只存儲在您的搜索索引中預覽文本。將整個文檔存儲在其他地方,如文件服務器。

0

我的願望,我懷疑是由許多網站共享,是提供一個文本片段與每個查詢響應。從單純的標題或等同物升級用戶看到的內容。這很正常(以谷歌爲例)和生產技術。 目前,我們無法輕鬆應對從Solr/Lucene將整個內容主體發送到Web演示程序並在那裏創建代碼段以及其他許多響應,因爲這是一個重要的網絡,CPU和內存管理器(想想處理許多多MB文件)。

Solr/Lucene有一個控制功能,可以根據請求只發送前N個字節的內容,從而節省了很多麻煩。有亮點的雜物等就是這樣,並干擾正確的使用。我們記住,將材料添加到Solr/ucene中的機制可能不會解析文件,因此這些饋線不能創建片段。

相關問題