У меня есть запрос, который делает ILIKE в 11 строковых или текстовых полях таблицы, которая не большая (500 000), но для ILIKE явно слишком большая, поисковый запрос занимает около 20 секунд. База данных - postgres 8.4Hibernate Search, Lucene или любая другая альтернатива?
Мне нужно реализовать этот поиск намного быстрее.
Что пришло на ум:
Я сделал дополнительный столбец TVector, собранный из всех столбцов, которые должны быть найдены, и создал полнотекстовый индекс на нем. Полнотекстовый поиск был довольно быстрым. Но ... Я не могу отобразить этот тип TVECTOR в моем .hbms. Таким образом, эта идея отпала (в любом случае я оттолкнул ее скорее как временное решение).
Hibernate поиск. (Слышал об этом в первый раз сегодня). Кажется, это обещание, но мне нужно испытать это, потому что я не хочу входить в новый API, возможно, не самый простой, для чего-то, что можно было бы сделать проще.
Lucene
В любом случае, теперь это случилось с этой таблицей, но я хотел бы, чтобы решение было более универсальными и применяются для будущих дел, связанных с полнотекстовым поиском.
Все советы оценены!
Thanx
thanx для объяснений, еще один короткий вопрос. Я хочу, чтобы иметь возможность искать несколько строковых полей. Имеет ли смысл хранить все остальные поля в индексе, но не сделать поиск, а затем, когда я ударил, я получаю объект оттуда или должен просто получить IDS и перейти в базу данных, чтобы получить их ? – Julia
@Julia Вы должны индексировать только те поля, которые вы хотите найти. Вы указываете Hibernate Search, что такое @DocumentId (также @Id) индексированного объекта. Затем Hibernate будет использовать этот идентификатор, чтобы получить сущность из базы данных (или кеша сеанса), не беспокоясь об этом. По сути, Hibernate Search принимает строку поиска и возвращает вам сущности домена, соответствующие этому поиску. Аккуратно? –
аккуратно, спасибо! – Julia