我想知道lucene索引中每個文檔的術語數。我一直在API和互聯網搜索沒有結果。你可以幫我嗎?如何計算lucene索引中每個文檔的術語數?
回答
Lucene是爲回答相反的問題而建立的,也就是說,哪些文檔包含給定的術語。因此,爲了獲得文檔的條款數量,您必須進行一些修改。
第一種方法是爲每個字段存儲術語向量,您需要能夠檢索術語數。術語矢量是字段的術語列表。在搜索時,您可以使用IndexReader的getTermFreqVector方法(如果它們存儲在索引時)檢索它。當你有它的時候,你得到了矢量的長度,你有該字段的術語數。
如果您存儲了文檔的字段,另一種方法是取回這些字段的文本並通過分析它來計算術語的數量(將文本拆分爲單詞)。
最後,如果字段的項數的近似值足夠用於您,並且您在索引時存儲了標準,則可以選擇計算用於計算字段的標準的函數的反函數。如果仔細查看Similarity類的方法lengthNorm,您會注意到它使用了字段的條數。該方法的結果使用encodeNorm方法存儲在索引中。您可以在搜索時使用IndexReader的norms方法檢索規範。根據手中的規範,使用lengthNorm中使用的逆數學函數來取回術語數。就像我說的那樣,這只是一個近似值,因爲當規範被存儲時,一些精度會丟失,並且您可能無法獲得與存儲的數量完全相同的數字。
如果你沒有在索引時間存儲術語向量,這實際上是在Lucene中很難做到的。 Lucene的底層數據結構是一個倒排索引,它將條目存儲爲鍵並將文檔ID列表存儲爲值。這就是爲什麼API中沒有「getNumTerms()」方法的原因,因爲Lucene採用的基本數據結構不支持它。
也就是說,您可以將術語向量存儲在索引中,您可以在搜索時通過文檔ID查找術語向量。這些向量基本上是該文檔中所有術語的完整列表,然後您可以計算得到您的術語#。
見
http://lucene.apache.org/java/3_0_1/api/all/org/apache/lucene/document/Field.TermVector.html
或者,你可以事先計算所有的條款,並將其存儲在索引的字段。
- 1. 如何在Lucene中索引文檔中的所有術語?
- 2. 在lucene中沒有索引的計算術語向量4
- 3. 在Lucene/Lucene.net搜索中,如何計算每個文檔的點擊次數?
- 4. Lucene。我如何計算每個文檔的點擊次數?
- 5. 如何計算術語文檔矩陣?
- 6. 如何確定每個文檔中術語的術語頻率?
- 7. 如何使用Lucene搜索不包含術語的文檔?
- 8. 如何從Lucene索引中獲取下一個術語?
- 9. Lucene索引 - 大量文檔/短語
- 10. 如何檢索3.0.2中由Lucene索引的文檔總數?
- 11. 如何計算文檔字段中特殊術語的頻率?
- 12. Lucene索引:排除某些術語
- 13. 如何在Lucene上只搜索每個搜索到的文檔
- 14. 如何從Lucene的文檔術語矢量中獲取位置?
- 15. Lucene索引html文檔
- 16. Lucene更新文檔索引
- 17. 如何使用Lucene索引和搜索多個術語和短語
- 18. Lucene不索引文件中的一些術語
- 19. 如何在Lucene中獲取文檔術語矢量的文檔ID
- 20. 如何在lucene中使用術語刪除文檔
- 21. 如何在Lucene 3.5.0中提取文檔術語矢量
- 22. Lucene索引 - 單個術語和短語查詢
- 23. 歸檔lucene索引
- 24. 如何從Lucene 4.0索引中提取單個文檔?
- 25. 我想閱讀我的索引與Lucene的單個術語
- 26. 計算包含特定術語的文檔數
- 27. 在Lucene索引中搜索特定術語
- 28. 從lucene查詢獲取術語計數
- 29. 在計算命中/文檔時Lucene的可靠性如何?
- 30. 搜索兩個Lucene文檔
+1在索引時間存儲條款的數量是一個好主意 – 2010-08-26 13:49:51