короткой версиюподхода для эффективного поиска в результате набор
Я хотел бы, чтобы эффективно выполнять полнотекстовый поиск в произвольном множестве объектов в моей базе данных. Все объекты будут индексироваться в поисковой системе.
Моя идея
Я планирую сделать эту операцию на 2 части. Сначала поисковая система будет запрашиваться для взвешенного/отсортированного набора идентификаторов, соответствующих полнотекстовому поиску. Этот набор идентификаторов будет отфильтровываться, удаляя любые идентификаторы, не входящие в исходный набор пользователя.
Есть ли лучший способ сделать это? Если нет, можете ли вы дать какие-либо рекомендации по эффективному выполнению этого?
Long Version
Я нахожусь в стадии планирования создания веб-приложение, которое позволит пользователям визуализировать наборы высоко связанных данных и манипулировать этими визуализаций для получения множества интересных вершин для дальнейшего анализа. Действия фильтрации, выполняемые пользователем через gui, будут сложными и очень трудными для выражения в виде индексируемых величин.
Я хотел бы разрешить пользователям выполнять полнотекстовый поиск результатов в этих наборах данных. Глядя на what Google does for searching within a result set, их подход простого добавления раннего поискового запроса к новому запросу для включения «поиска внутри» может оказаться невозможным для моих данных.
Принятый ответ this question способствует идее использования операций базы данных для фильтрации результатов, поступающих из поисковой системы.
Как часть решения, я также рассматриваю возможность переключения переднего конца на использование lunr, когда набор вершин, который пользователь хочет выполнить поиск, становится достаточно маленьким, чтобы обрабатывать передний конец. Выяснив, что это за допустимый предел, потребуется некоторое тестирование, но я сомневаюсь, что это будет несколько тысяч, поэтому потребность в серверном решении останется.
Environment Подробности
Я бегу Python 2.7 на AppEngine.
В этом приложении, я ожидаю, что исходные наборы результатов (которые будут найдены внутри) будут содержать от 10 до 2000 вершин. Общее количество вершин во всей базе данных может быть на пару порядков больше.
Ха-ха на ссылке Southpark. Но это не для аналитики, я обещаю. Также похоже, что BigQuery доступен только для чтения, поэтому для меня это не сработает. Данные не будут меняться очень часто, но это нужно будет изменить. Однако идея кэширования промежуточных значений для более быстрого разрешения ключевых запросов, вероятно, я могу использовать. – turtlemonvh
Теперь, когда я думаю об этом, хотя это не является прямой аналитикой, у него есть такой вкус. Рекомендованный ответ Stevep напоминает, что [как измерители используют mongodb для аналитики] (http://www.10gen.com/presentations/mongodb-analytics). – turtlemonvh