2012-05-16 58 views
0

我想要做到以下幾點:我想通過分別查詢每個字段,然後將最高k個匹配添加到此設置來創建一組候選人。在完成之後,我需要在這個候選集上運行另一個查詢。 我現在如何實現它的方式是使用帶有匹配每個候選文檔的唯一ID字段的BooleanQuery的QueryWrapperFilter。然而,這意味着我必須爲每個候選文檔調用IndexSearcher.doc()。get(「docId」),然後才能將其添加到我的BooleanQuery中,這是主要的瓶頸。我只是通過MapFieldSelector(「docId」)加載docId字段。與docIds的Lucene過濾器

我想創建自己的Filter類,但是我不能直接使用內部Lucene doc id,因爲它們是按照段來指定的。對如何處理呢?

回答

1

取而代之的讀取所存儲的docId,索引字段(它可能已經是),並使用FieldCache以更快的速度獲取docIds。然後,而不是用在BooleanQuery的docIds,請嘗試使用TermsFilterFieldCacheTermsFilter。後面的文檔描述了性能的權衡。

+0

我用FieldCache和FieldCacheTermsFilter一起運行,現在正在運行快得多,謝謝! – peterparkr