Как реализовать полнотекстовый поиск в PostgreSQL с помощью Blaze Persistence CriteriaBuilder?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать полнотекстовый поиск в PostgreSQL с помощью Blaze Persistence CriteriaBuilder?

Сообщение Anonymous »

Я разрабатываю построитель динамических критериев, который принимает параметры фильтра (поле, оператор, значение) и возвращает созданный объект CriteriaBuilder. Я перебираю параметры и использую каждый параметр для добавления в критерии, где:
  • Поле: используется в .where( ).
  • Оператор: определяет ограничение (, .le(), .isNull() и т. д.).
  • < strong>Значение: добавляется к ограничению в качестве параметра, если применимо.
В большинстве случаев он выполняет свою работу, у меня возникли трудности с реализацией Restriction Builder для полнотекстового поиска PostgreSQL. (https://www.postgresql.org/docs/current ... H-MATCHING), особенно с "" оператор/предикат.
Я предполагаю, что политика разработчиков Blaze Persistence может быть аналогична политике разработчиков Criteria API (https://github.com/spring-projects/spring- data-r2dbc/issues/825), поэтому я просто хотел проверить, не пытался ли кто-нибудь еще решить эту задачу с помощью Blaze Persistence и нашел элегантное решение (или, по крайней мере, лучшее, чем я придумал). с).
Предлагаемое решение:
Мой подход добавляет две пользовательские функции JPQL: первая вызывается в BaseWhereBuilder, вторая в RestrictionBuilder:
Первая функция "TS_VECTOR_PREFIX":

Код: Выделить всё

@Override
public void render(FunctionRenderContext context) {
context.addChunk("1");
}
Вторая функция "TS_VECTOR_MAIN":

Код: Выделить всё

@Override
public void render(FunctionRenderContext context) {
context.addChunk("1 AND TO_TSVECTOR('simple',");
context.addArgument(0);
context.addChunk(") @@ TO_TSQUERY('simple',");
context.addArgument(1);
context.addChunk(")");
}
Идея состоит в том, чтобы «обмануть» CriteriaBuilder, добавив сразу два условия:
  • Тривиальное условие () для использования добавленного "="from .eqExpression() из CriteriaBuilder.
  • Фактическое полное условие текстового поиска с использованием @@.
Вот как это выглядит в CriteriaBuilder (я хочу возвращать объекты, в имени которых есть слова «pamel» и «Blake». Столбец Single_string_name, добавление префиксного поиска):

Код: Выделить всё

public  PagedList findRecords(Class view, QueryData query, int offset, int pageSize, Sort sort) {
CriteriaBuilder criteriaBuilder = criteriaBuilderFactory.create(entityManager, SomeEntity.class);

criteriaBuilder.where("TS_VECTOR_PREFIX()").eqExpression("TS_VECTOR_MAIN(names.singleStringName, 'pamel:*&Blake:*')");

return entityViewManager.applySetting(EntityViewSetting.create(view), criteriaBuilder)
.page(offset, pageSize)
.getResultList();
}
Хотя это решение подходит для моих текущих нужд, я считаю его неэлегантным из-за того, что я сам создаю основное условие, передавая его как Значение для RestrictionBuilder. Интересно, решил ли кто-нибудь еще эту задачу более чисто, используя Blaze Persistence или подобные инструменты. Будем очень признательны за любые предложения и идеи!

Подробнее здесь: https://stackoverflow.com/questions/793 ... nce-criter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как реализовать полнотекстовый поиск в PostgreSQL с помощью Blaze Persistence CriteriaBuilder?
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Почему javax.persistence-api был заменен на jakarta.persistence-api в весенних данных jpa starter?
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Класс jakarta.persistence.generationtype не имеет члена поля «jakarta.persistence.generationtype uuid '
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Можно ли выполнить полнотекстовый поиск в кадре данных pandas?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как использовать полнотекстовый поиск в базе данных sqlite3 в django?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»