2015-01-02 3 views
1

У меня есть простой сайт MongoDB, где выделенная поисковая система (например, elasticsearch) будет излишним и добавит сложности поддержки, поэтому я хочу придерживаться полнотекстового поиска MongoDB 2.6. Как я вижу, MongoDB индексирует индекс текстового поиска только one полей в коллекции. Если у меня есть коллекция Users и вы хотите включить полнотекстовый поиск как для имени пользователя, так и для описания пользователя, для чего нужна правильная структура коллекции? Я могу предложить создать отдельную коллекцию Text, где я буду хранить всю текстовую информацию для своего сайта и использовать ее для поиска. Например, пользователь будет вставлен так:Что такое правильная структура коллекции mongodb для полнотекстового поиска?

users.insert({ 
    name_ref: texts.insert({text: "John Doe", type: USER_NAME}), 
    description_ref: texts.insert({text: "This is a test user", type: USER_DESCR}), 
}); 

Это хорошее решение, или так много зависимостей между сбором будут убивать MongoDB, и мне нужно использовать какой-то другой appproach?

ответ

3

Как я могу видеть, MongoDB индексирует текстовый индекс только для одного поля в коллекции.

Вы здесь ошибаетесь. Коллекция может содержать только один текст индекс за коллекцию. Из docs:

Коллекция может иметь максимум один текстовый индекс.

Индекс может в свою очередь содержать multiple поля для индексирования для текстового поиска.

Вы можете создать индекс,

db.collection.ensureIndex({"userName":"text","description":"text"}); 

И выполнить поиск по определенному ключевому слову, как,

db.collection.find({$text:{$search:"keyword"}}); 

Ваша коллекция может быть самодостаточной, без каких-либо ссылок на другие коллекции.

{ 
    userName:"John Doe", 
    description:"This is a test user" 
} 
+0

Спасибо за прекрасный ответ и новый год! – grigoryvp

+0

Добро пожаловать. И тебя с Новым годом ;-) – BatScream

Смежные вопросы