2012-09-25 18 views
6

Czy ktoś wie, jak utworzyć indeks na danych JSON w PostgreSQL 9.2?Jak zindeksować dane JSON w PostgreSQL 9.2?

Przykładowe dane:

[ 
    {"key" : "k1", "value" : "v1"}, 
    {"key" : "k2", "value" : "v2"} 
] 

powiedzieć, czy chcę do indeksu wszystkich klawiszy, jak to zrobić?

Dzięki.

+0

Czy istnieje powód, dlaczego jesteś przechowywania zwykły JSON i nie oddzielając do kolumn tabeli? I jakikolwiek powód, dla którego nie akceptujesz odpowiedzi? – Ian

+0

Oceniam obsługę typów JSON PostgreSQL 9.2, a więc i potrzebę. Nie widzę ustawienia, które wyłącza odbieranie odpowiedzi? Czy jest coś takiego? – ankurvsoni

+0

Może spojrzeć na: http://people.planetpostgresql.org/andrew/index.php?/archives/249-Using-PLV8-to-index-JSON.html – Ian

Odpowiedz

3

Jesteś znacznie lepiej wyłączyć za pomocą hstore dla pól indeksowanych , przynajmniej na razie.

CREATE INDEX table_name_gin_data ON table_name USING GIN(data); 

Można także utworzyć indeksy GIST, jeśli interesuje Cię wyszukiwanie pełnotekstowe. Więcej informacji: http://www.postgresql.org/docs/9.0/static/textsearch-indexes.html

2

Obecnie nie ma żadnych wbudowanych funkcji do bezpośredniego indeksowania JSON. Ale możesz to zrobić za pomocą indeksu opartego na funkcjach, w którym funkcja jest napisana w JavaScript.

Zobacz ten wpis na blogu do szczegółów: http://people.planetpostgresql.org/andrew/index.php?/archives/249-Using-PLV8-to-index-JSON.html

Nie ma innego blogu, z którego mówi o JSON i jak może on być stosowany z JavaScript: http://www.postgresonline.com/journal/archives/272-Using-PLV8-to-build-JSON-selectors.html

+0

Ale w moim przypadku - muszę zindeksować wszystko w obiekcie json. Czy jest jakiś sposób na zrobienie tego? – ankurvsoni

+0

@ankurvsoni: nie, nie sądzę. –

+0

Należy zauważyć, że od 9.3 istnieją [funkcje JSON i operatory] (http://www.postgresql.org/docs/9.3/static/functions-json.html). – dukedave