Как индексировать данные JSON в PostgreSQL 9.2?

кто-нибудь знает, как создать индекс на данных JSON в PostgreSQL 9.2?

пример:

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

скажите, если я хочу индексировать все ключи, как это сделать?

спасибо.

3 ответов


вы гораздо лучше использовать hstore для индексированных полей, по крайней мере сейчас.

CREATE INDEX table_name_gin_data ON table_name USING GIN(data);

вы также можете создавать индексы GIST, если вас интересует полнотекстовый поиск. Подробнее здесь: http://www.postgresql.org/docs/9.0/static/textsearch-indexes.html


В настоящее время нет встроенных функций для индексирования JSON напрямую. Но вы можете сделать это с индексом на основе функции, где функция написана на JavaScript.

Подробнее см. В этом блоге:http://people.planetpostgresql.org/andrew/index.php?/archives/249-Using-PLV8-to-index-JSON.html

есть еще одно сообщение в блоге, в котором говорится о JSON и о том, как его можно использовать с JavaScript: http://www.postgresonline.com/journal/archives/272-Using-PLV8-to-build-JSON-selectors.html


этот вопрос немного староват, но я думаю, что выбранный ответ не является идеальным. Чтобы индексировать json (значения свойств внутри текста json), мы можем использовать индексы выражений с PLV8 (предложенные @a_horse_with_no_name).

Крейг Керштейн делает большую работу по объяснению / демонстрации:

http://www.craigkerstiens.com/2013/05/29/postgres-indexes-expression-or-functional-indexes/