Кэширование результатов поиска Lucene.net

@echo off
setlocal
set "supportdir=C:\Program Files (x86)\Citrix\Remote Support Customer"

REM === Agent already deployed on the computer?
for /d %%A in ("%supportdir%\*") do if exist "%%~A\g2ax_comm_customer.*" exit /b
REM === Deploying agent in silent mode
"\\location.exe" --mode unattended

Сегмент пути ???? не будет разрешен, поэтому вам может потребоваться перебрать неизвестные подкаталоги, используя цикл for /d. Подстановочные знаки действительны для последнего сегмента.

%%~A будет иметь абсолютные пути того, что было ????. Теперь можно проверить, существует ли %%~A\g2ax_comm_customer.*.

6
задан Nick 4 March 2009 в 12:41
поделиться

3 ответа

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

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

BTW, документы Java (я нашел), столь же применимый к версии .NET.

Для большего количества информации о Вашей проблеме посмотрите здесь: http://wiki.apache.org/lucene-java/ImproveSearchingSpeed

6
ответ дан 10 December 2019 в 02:54
поделиться

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

Документ с 5000 индексами звучит тривиальным в размере, но это в основном зависит от того, как Вы создаете свой индекс, что Вы индексируете/храните, как Вы запрашиваете (оперативно), размер документа, и т.д.

Восполните пробелы с такой информацией, как Вы можете о своем индексе.

1
ответ дан 10 December 2019 в 02:54
поделиться

Во-первых, сам Lucene поддерживает версию в оперативной памяти каталогов:

Lucene.Net.Store.RAMDirectory

Можно использовать его как:

RAMDirectory idx = new RAMDirectory();

// Make an writer to create the index
IndexWriter writer =
    new IndexWriter(idx, new StandardAnalyzer(), true);

Если это работает на Вас, но это использует слишком много поршня, запишите обертку и выставьте ее как Интерфейсный или веб-сервис. Или, если Вы просто хотите кэшировать то, что Вы запрашиваете для управления, когда объекты выпадают из кэша, можно записать обертку вокруг Lucene, который кэширует наиболее распространенные результаты для Вас на основе ключевых слов, очевидно.

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

1
ответ дан 10 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: