2012-04-15 56 views
1

嗯,我一直在試圖讓我的當前應用程序可搜索插件,但有一件事困擾我:Grails - 可搜索插件:我可以阻止它僅依賴於Lucene索引嗎?

每個搜索都只依賴於Lucene索引。

而這會導致一些令人不安的問題(如:http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html)。基本上,每個一對多關係在搜索結果中都會有一個空值。爲了避免這種情況,你必須讓很多域名可搜索,但是,這意味着我的數據庫的一半將被映射到Lucene索引中...並且這聽起來錯了。

我目前處於開發環境,所以所有東西都加載到內存中,Lucene使得Java使用至少40%以上的內存(總共使用了1.2GB,並且我限制了其中包含的內容儘可能用onlyexclude)。

那麼,我可以阻止它只依賴Lucene索引嗎?我希望它在索引上搜索,但不是隻返回索引所具有的內容。或者,是否真的很方便將所有內容都保存在索引中(並且因此以的搜索方式執行)而不是進行手動HQL查詢?

回答

0

那麼答案是:是的,你可以檢索一個對象的所有信息,而不必將其添加到索引。

爲此,您需要配置插件。首先創建配置文件:

grails install-searchable-config 

然後打開它,找到defaultMethodOptions並更改reload參數去true。事情是這樣的:

defaultMethodOptions = [ 
    search: [reload: true, escape: false, offset: 0, max: 10, defaultOperator: "and"], 
    suggestQuery: [userFriendly: true] 
] 

現在搜索將重新從數據庫中的對象,但是,作爲配置文件的狀態,因爲現在它需要連接到數據庫的搜索將變得更慢。

1

我認爲您需要詳細瞭解在域類定義中使用component關鍵字。

在這裏看到:http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+concepts#Searchable Component

這樣你可以包括你的域模型的相關信息,而不會有這麼多的其他類污染指數。

+0

我閱讀了關於組件的內容,但是如果你注意到文檔說的話。 「[...]可搜索組件的數據存儲在擁有對象自己的可搜索數據中」。看看Lucene索引,你可以確認這是真的,索引是用組件的數據填充的。 – GalmWing 2012-04-20 21:16:30

+0

這意味着索引不會獲得額外的類,但具有_component_的類會變得更大,因爲數據會附加到它。 – GalmWing 2012-04-20 21:19:41