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

Таким образом, вы можете включить соответствующую информацию из вашей доменной модели, не загрязняя индекс множеством дополнительных классов.

Другие вопросы по тегам