Hola Horacio, puede que el operador de indices btree text_pattern_opste pueda ayudar, hace un tiempo resolví con ellos, en búsquedas de texto tipo:
 atributo like 'texto%'
O tal vez la extensión pg_trgm que tiene unos operadores especiales para indices gin y gist también te puedan ayudar.

Saludos
PD: si tienes 9.4, ¿has valorado utilizar JSONB?


El 9/5/2015 a las 8:39 PM, Horacio Degiorgi escribió:
Hola a todos:
estoy buscando la forma de mejorar una consulta a un campo json
el campo en cuestion es "jmarc"
y contiene informacion como esta (extracto, el registro tiene 30 claves json)

{
"id":"OUNOUNCON000712",
"format":[
"Impreso"
],
"title":"El derecho del mar : estados archipela\u0301gicos : historia legislativa de 
la parte IV de la Convencio\u0301n de las Naciones Unidas sobre el Derecho del Mar \/ Oficina de 
Asuntos Ocea\u0301nicos y del Derecho del Mar.",
"building":"Biblioteca Central",
"recordtype":"marc"
}

Estoy usando esta consulta en una gran base de datos de 960mb y 300.000 registros.

select  identificador, idcatalogo, titulo  from
catalogo where idcoleccion = 2 and json_extract_path_text(jmarc,'title') ilike '%arte%' order by identificador LIMIT 1 OFFSET 6

hay forma de optimizar la consulta de tipo ilike como la que estoy haciendo ?

el indice creado es:
CREATE INDEX idx_catalogo_jj_title ON catalogo USING btree (json_extract_path_text(jmarc, VARIADIC ARRAY['title'::text]))




Lic. Horacio Degiorgi
http://bdigital.uncu.edu.ar
http://sid.uncu.edu.ar <http://sid.uncu.edu.ar>
Mendoza - Argentina

Responder a