Лучший способ сохранить индекс в режиме реального времени? - PullRequest
15 голосов
/ 25 октября 2010

У меня индексный файл Solr / Lucene примерно 700 Гб.Документы, которые мне нужно проиндексировать, читаются в режиме реального времени, отправляется примерно 1000 документов каждые 30 минут, и их необходимо проиндексировать.В моем сценарии каждые 30 минут выполняется скрипт, который индексирует документы, которые еще не проиндексированы, поскольку требуется, чтобы новые документы были доступны для поиска как можно скорее, но этот процесс замедляет поиск.

Это лучший способ, которым я могу индексировать последние документы, или есть какой-то другой лучший способ!

Ответы [ 5 ]

10 голосов
/ 25 октября 2010

Во-первых, помните, что Solr не поисковая система в реальном времени (пока). Все еще работа должна быть выполнена.

Можно использовать настройку master / slave , где индексация выполняется на главном и поиск на ведомом При этом индексация не влияет на производительность поиска. После того, как фиксация сделана на ведущем устройстве, заставьте ведомое устройство получить последний индекс от ведущего устройства. Пока новый индекс реплицируется на ведомом устройстве, он все еще обрабатывает запросы с предыдущим индексом.

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

4 голосов
/ 25 октября 2010

Вы можете легко сделать это с Lucene.Разделите индексы на несколько частей (или, если быть точным, при создании индексов создайте «меньшие» части.) Создайте поисковик для каждой части и сохраните ссылку на них.Вы можете создать MultiSearcher поверх этих отдельных частей.

Теперь будет только один индекс, который получит новые документы.Регулярно добавляйте документы в этот индекс, фиксируйте и снова открывайте этот поисковик.

После обновления последнего индекса вы можете снова создать новый мульти-поисковик, используя ранее открытые поисковики.

Таким образом, в любой момент вы снова откроете только один поисковик, и это будет довольно быстро.

2 голосов
/ 11 декабря 2010

Проверьте http://code.google.com/p/zoie/ обертку вокруг Lucene, чтобы сделать ее в реальном времени - код, пожертвованный Linkedin.

1 голос
/ 15 ноября 2010
1 голос
/ 28 октября 2010

^^ Я делаю это с обычной люценой, не соль, и это работает очень хорошо. однако не уверен, есть ли более простой способ сделать это в данный момент. Twitter недавно использовал lucene для поиска и эффективно выполняет поиск в реальном времени, просто записывая их в индекс при любом обновлении. их индекс полностью находится в памяти, поэтому обновление / чтение индекса не имеет никакого значения и происходит мгновенно, индекс lucene всегда может быть прочитан во время записи, если одновременно существует только один модуль записи.

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