Implementación de full text de postgres en entidades java

En la tabla y base de datos

– Agregar una columna en la tabla
ALTER TABLE schema.table ADD COLUMN fulltext tsvector;

– Crear función que ejecutará el trigger
CREATE OR REPLACE FUNCTION public.table_vector_update()
RETURNS trigger AS
$BODY$
BEGIN
IF TG_OP = ‘INSERT’ OR TG_OP = ‘UPDATE’ THEN
new.fulltext = to_tsvector(‘pg_catalog.spanish’, COALESCE(NEW.campo_indexar, ”));
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

CREATE INDEX textsearch_idx ON schema.table USING GIN (fulltext);

– Inicialización de los datos

UPDATE schema.table SET fulltext = to_tsvector(‘spanish’, campo_indexar);

CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON schema.table
FOR EACH ROW EXECUTE PROCEDURE public.table_vector_update();
Clase Java
Método ejemplo que usa el full text.
public static List

fullTextSearch(String s) {

String[] split = s.split(“[\\s+]“);
String collect = Arrays.asList(split).stream().collect(Collectors.joining(” & “));

String sql = “SELECT id FROM schema.table WHERE fulltext @@ to_tsquery(‘” + collect + “‘)”;

List ids = JPA.em().createNativeQuery(sql).getResultList();
return ids.stream().map(key -> (Table) Table.findById(key.longValue())).collect(Collectors.toList());
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>