2013-10-14 69 views
2

給定查詢和術語,如何計算查詢中每個文檔中術語的平均位置並將其返回? 我正在尋找最快(性能明智)的解決方案,並且願意擴展solr功能。Solr查詢 - 計算一個術語的平均位置

接下來,我需要計算查詢中所有文檔的術語的平均位置。因此,我不需要將文檔themesleves返回給客戶端 - 僅僅是平均的術語位置。

感謝 薩爾

+0

請用一個例子來定義「一個術語的平均位置」。 – phani

+0

假設我們有文件: 你好我的名字是phani 和 你好,我是由我的父母打電話phani 那麼長期的平均倉位「我」在這些文件集(2 + 7)/ 2 – Saar

回答

1

解決的辦法之一是做到以下幾點 (相當編碼LOT - 我不知道一個快捷方式,你需要遍歷文檔中的長期立場沒有內置。可以通過函數來​​實現,但您也可能會想到使用Payloads)。

  1. 創建您自己的查詢類型,擴展基本TermQuery。
  2. 對於TermsQuery評分邏輯歸結爲遍歷由術語創建的TermsEnum對象。您可以使用DocsAndPositionsEnum枚舉每個文檔中特定術語的所有位置。
  3. 我假設你不關心Lucene相似度計算(對嗎?)。然後,您可以簡單地將特定文檔中的平均排名作爲'分數'返回
  4. 棘手的部分是在您不返回文檔本身的情況下返回集合中的平均信息。 我會嘗試使用StatsComponent,它返回結果集中某個字段的基本統計信息。我不知道它是否可以使用「分數」字段或任何其他計算字段。 如果沒有,請嘗試更改QueryComponent以計算平均值,並將其設置爲結果而不是文檔。 如果您希望在羣集內運行此事(分佈式搜索),則還必須覆蓋分佈式查詢行爲,以便計算所有分片的平均值。

也許另一種選擇是改變索引邏輯並計算分析階段的平均值。如果你設法這樣做(把它放入負載中),你可以在查詢時更快地獲取這些信息,但這意味着開發一個複雜的分析過濾器。

0

如果我理解正確,您希望計算爲特定查詢返回的文檔集中的術語的所有位置的算術平均值。

這是我能想出來的。

首先,您必須啓用positional information索引才能從索引中提取任何位置信息。

看看這個組件:The Term Vector Component

  • 供應查詢
  • 供應tv.positions =真。
  • 供應行= veryBigNumber,因爲他們在Solr rows parameter

的迴應中提到將包含你需要計算的算術意思。

請不要忘記在查詢中指定要查找的術語。 例如:q:(field1:someExQueryIfNeeded AND field2:targetTerm)

確保您檢索到您需要的最少的東西。如果您最終收到很多噪音,您可以隨時將此組件定製爲Solr Plugin,並只返回所需的信息。