Grails - плагин для поиска: могу ли я остановить его, полагаясь только на индекс Lucene?
Ну, я пытался заставить поисковый плагин работать с моим текущим приложением, но есть одна вещь, которая беспокоит меня:
Каждый поиск основан исключительно на индексе Lucene.
И это приводит к некоторым тревожным проблемам (например: http://jan-so.blogspot.mx/2009/04/eager-fetching-and-searchable-plugin-in.html). По сути, каждое отношение "один ко многим" будет иметь нулевое значение в результате поиска. Чтобы избежать этого, вы должны сделать многие из ваших доменов доступными для поиска, но это означает, что половина моей базы данных будет сопоставлена с индексом Lucene... и это звучит неправильно.
В настоящее время я нахожусь в среде разработки, поэтому все загружается в память, и Lucene заставляет java использовать как минимум на 40% больше памяти (в общей сложности используется 1,2 ГБ, и я ограничил то, что включить в него как можно больше с only
а также exclude
).
Итак, могу ли я остановить это, полагаясь только на индекс Lucene? Я хочу, чтобы он выполнял поиск по индексу, но не возвращал только то, что имеет индекс. Или действительно удобно хранить все в индексе (и, следовательно, делать это с возможностью поиска), а не делать ручные HQL-запросы?
2 ответа
Ответ таков: да, вы можете получить всю информацию об объекте, не добавляя ее в индекс.
Для этого вам нужно настроить плагин. Сначала создайте файл конфигурации:
grails install-searchable-config
Затем откройте его, найдите defaultMethodOptions
и изменить reload
парам к true
, Что-то вроде этого:
defaultMethodOptions = [
search: [reload: true, escape: false, offset: 0, max: 10, defaultOperator: "and"],
suggestQuery: [userFriendly: true]
]
Теперь поиск перезагрузит объекты из БД, но, как говорится в файле конфигурации, поиск станет медленнее, потому что теперь ему нужно подключиться к БД.
Я думаю, что вам нужно будет прочитать об использовании component
Ключевое слово в определениях классов домена.
Смотрите здесь: http://grails.org/Searchable+Plugin+-+Mapping+-+Compass+concepts
Таким образом, вы можете включить соответствующую информацию из вашей доменной модели, не загрязняя индекс множеством дополнительных классов.