Mongo db полнотекстовый поиск и приоритеты - PullRequest
1 голос
/ 09 ноября 2011

Я планирую создать полнотекстовый поиск в моем php-приложении с Mongo db.

Полнотекстовым поиском будут документы коллекции при наведении, хранящиеся так:

title: "the title" STRING

description: "the description" STRING

Итак, как говорится в официальном руководстве Mongo Db, я должен разбить поле, в котором я должен искать по ключевым словам, и вставлять ключевые слова в новое поле документа (_keywords), и это можно сделать в уставе вставки.

Так что, если я хочу искать внутри полей заголовка и описания, я должен разделить их оба?

Также мне нужно только 1 поле _keywords: {} в документе или мне нужно 2 отдельных поля _keywords (1 для заголовка и 1 для описания)?

Тогда кто-нибудь может объяснить, как я могу добавить какие-то приоритеты при поиске внутри _keywords или даже какие из них являются наилучшей практикой (PHP делает это, Mongo делает это, другие делают это)?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Mongodb не предназначен для полнотекстового поискового движка, и я бы не стал пытаться заставить его работать так же. Это, вероятно, ухудшит вашу производительность в долгосрочной перспективе, так как вам нужно будет проиндексировать эти ключевые слова, и это будет довольно много данных. Поскольку Mongodb пытается сохранить ваши индексы в памяти, это повысит ваши шансы на удаление более важных данных из памяти, эффективно снижая вашу производительность.

Вместо этого рассмотрите возможность использования Lucene, Solr или ElasticSearch.

Я использую Solr, чтобы усилить поисковый запрос, когда MongoDB не совсем его сократил. Я читал замечательные вещи об ElasticSearch - похоже, вам не нужно почти ничего настраивать, что делает его отличным для новичков в Lucene.

EDIT: Эта информация была точной на момент написания, но с тех пор MongoDB добавил полнотекстовый поиск. Подробнее об этом можно прочитать здесь: http://docs.mongodb.org/manual/core/text-search/

Я все еще верю, что поддержка этого была взломана как запоздалая мысль, но если все, что вам нужно сделать, это вернуть документ, основанный на сопоставлении ключевого слова, то этого будет достаточно. Однако, если вам нужен немного более надежный поисковый инструмент, производная Lucene по-прежнему будет вашим лучшим выбором.

1 голос
/ 23 июля 2013

Полнотекстовый поиск доступен начиная с версии 2.4

Checkout @ http://docs.mongodb.org/manual/core/text-search/

Текстовый поиск поддерживает поиск строкового содержимого в документах коллекции.В текстовом поиске вводится новый тип текстового индекса и новая текстовая команда.

Процесс текстового поиска:

токенизирует и связывает условия поиска во время создания индекса и выполнения текстовой команды.,присваивает оценку каждому документу, который содержит критерий поиска в проиндексированных полях.Оценка определяет соответствие документа заданному поисковому запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...