2011-10-14 126 views
2

我有一個複雜的查詢,它需要對某些字段進行全文搜索,並對其他字段進行基本限制。 Hibernate搜索文檔strongly advises against將數據庫查詢限制添加到全文搜索查詢,而不是recommends將所有必填字段放入全文索引。我遇到的問題是其他領域是不穩定的;值可能會每隔一分鐘左右發生一次更改,數據庫的更新可能會發生在執行搜索的JVM之外,因此很可能本地Lucene索引相對於這些字段已過時。將Hibernate搜索結果與關係數據庫查詢合併

在此尋找策略建議。到目前爲止我所得到的最好的結果是首先執行數據庫查詢(僅提取對象ID)並手動加入結果,然後執行全文搜索。並以某種方式有效地過濾來自數據庫的一組對象ID的Lucene結果。當然,我不知道每個單獨的查詢會得到多少結果,所以我擔心性能和內存。在最壞的情況下,每行可能會有數萬行。

回答

0

我對此很感興趣,因爲我們有一個非常相似的場景。

我們只需要顯示50個結果行作爲每行查找的最大值。我們使用索引中的db pk id對lucene索引運行查詢,並將查找從每個數據庫中拉出。它仍然是我們的表現。

由於您似乎想要處理多行和查找,我確實考慮過替代方案。時間戳任何數據庫行更新。這將允許我們查詢舊數據庫的索引,然後迭代調用相關文檔的索引。

0

我有同樣的問題,並做一個單獨的Lucene和條件查詢。如果我首先執行條件查詢,我將使用生成的id爲Lucene搜索應用自定義IdFilter,它將檢查結果是否來自第一個查詢的給定Id集合。但是,這種方法不能很好地擴展,因爲在我的情況下,第一個查詢後的結果數量可能很大,並且過濾器限制爲1024個ID。我沒有找到一個好的解決方案,但根據預期結果的數量更改了我的兩個查詢的順序。第一個查詢應該是過濾掉大部分結果的查詢。

0

您可以根據上次修改日期執行計劃程序索引更新。