2015-03-15 7 views
1

Я пытаюсь решить между PostgreSQL и MongoDB для проекта, который я буду делать, и мне нужна схема без хранения и полнотекстовый поисковый движок. Первая из них покрыта обоими параметрами, но я не уверен в этом.Полнотекстовый поиск в PostgreSQL JSON (без схемы, NoSQL-like)

Может ли PostgreSQL выполнять полнотекстовый поиск в данных JSON и, более конкретно, только в определенных полях внутри данных JSON?

Кроме того, какой из них является более точным для полнотекстового поиска, встроенной поисковой системы в PostgreSQL или в MongoDB? Или мне лучше использовать что-то совершенно другое, как Sphinx или ElasticSearch ? А если второй, какие базы данных это поддерживают?

+1

У меня такое чувство, что оно слишком велико. Кроме того, «точный», вероятно, не является качеством хорошего текстового поиска ... ElasticSearch - это собственная база данных, так сказать, поэтому ей не нужно «поддерживать» другие базы данных. – mnemosyn

+0

@mnemosyn Хорошо, я отредактирую часть ElasticSearch, но я не уверен, как другие вопросы слишком широки. Это очень простые вопросы. 1) Поддерживает ли PostgreSQL полнотекстовый поиск в документах JSON. И 2) с тем же набором данных, который даст мне лучшие результаты (в гипотетическом поиске). – alexandernst

+0

«лучше» в лучшем случае субъективно. Часто ни один из двух (или более вариантов) не является «лучшим» - каждый вариант имеет только «Плюсы и минусы», и вам нужно все это обсудить, чтобы решить, какие из них важны для вашей конкретной ситуации, – barryhunter

ответ

2

Полнотекстовый поиск PostgreSQL работает с типом tsvector. В основном:

Полный текст поиск в PostgreSQL основан на операторе сопоставления @@, который возвращает истину, если поисковый вектор (документ) соответствует tsquery (запрос)

Так данному строку JSON, чтобы индексировать определенные поля из него, вы хотите импортировать эти поля в столбец tsvector и связать их с содержимым с помощью внешнего ключа. Может быть удобно сделать это прозрачным с помощью триггера, следуя модели встроенного tsvector_update_trigger().

С точки зрения самой текстовой поисковой системы происхождение текста (поле (ы) JSON или иное) не имеет значения. Документ - tsvector.