Иногда простое" static Foo foo = new Foo();
" недостаточно. Просто думайте о некоторой вставке основных данных, которую Вы хотите сделать.
, С другой стороны, необходимо было бы синхронизировать любой метод, который инстанцирует одноэлементной переменной как таковой. Синхронизация не плохо как такова, но она может привести к проблемам производительности или блокирующий (в очень очень редких ситуациях с помощью этого примера. Решение
public class Singleton {
private static Singleton instance = null;
static {
instance = new Singleton();
// do some of your instantiation stuff here
}
private Singleton() {
if(instance!=null) {
throw new ErrorYouWant("Singleton double-instantiation, should never happen!");
}
}
public static getSingleton() {
return instance;
}
}
Теперь, что происходит? Класс загружается через загрузчик класса. Непосредственно после того, как класс интерпретировался от массива байтов, VM выполняется статичный {} - блок. это - целый секрет: статический блок только называют однажды, время, данный класс (название) данного пакета загружается этим загрузчиком класса.
Хотя это и не были «полноценные» релизы (т.е. полная документация, обновления веб-сайта) Lucene.Net в течение некоторого времени, все еще есть свежие коммиты в его репозиторий SVN. Последний выпуск (2.3.2), например, был отмечен тегом 24.07.09 ( см. Здесь ). Поскольку разработка все еще продолжается, я бы использовал его для новых проектов с полнотекстовым поиском.
lucene.net обязательно будет отставать от java, поскольку это порт. Мне также не нравится, что порт lucene является прямой копией, хотя я полагаю, что это упрощает работу с документами. Следует рассмотреть возможность использования Solr , если вам не нужна сверхтонкая (двоичная) интеграция. Я использовал его раньше с хорошим успехом. Он по-прежнему работает на Lucene, но я думаю, что он лучше, поскольку имеет некоторые лучшие функции. Вы можете использовать его из .net через конечную точку HTTP.
Один вопрос, который нужно задать себе, - это то, что вам действительно нужно / что нужно в поисковом решении. Есть много способов реализовать поиск, и не все решения работают для каждой ситуации.
Хотя это не .net, я бы рекомендовал использовать Solr, поскольку он построен на lucene, и его будет просто интегрировать, учитывая тот факт, что он возвращает XML / HTTP и JSON
SQLite имеет FTS3 (полнотекстовый поиск 3), который может делать то, что вы хотите. У меня нет прямого опыта с этим, но я считаю, что он был разработан специально для того, чтобы делать то, что делает Lucene, по крайней мере, в простом случае. Я не верю, что вы можете изменить токенизатор или что-то еще (во всяком случае, не изменяя исходный код), но это вариант.
Взгляните на www.searcharoo.net . Он имеет сканер и такие функции, как остановка работы, индексирование офисных документов / PDF-файлов. Автор очень активен в статьях codeproject и довольно быстро отвечает на вопросы.
Насколько я понимаю, вам нужен «просто» полнотекстовый индекс в вашей существующей базе данных, и полнотекстовый поиск SQL Server в принципе работает для вас, но ваша текущая реализация / настройка тоже медленный.
На вашем месте я бы не выбрал совершенно другой подход (просто подумайте о беспорядке, связанном с синхронизацией внешнего индекса с вашей базой данных, или объедините результаты запросов от обоих и т. Д.). Попытайтесь исправить проблему производительности с SQL Server, поскольку никто всерьез не предположит, что 6sec для поиска 7k строк - это последнее слово для решения корпоративного класса, которое используется для некоторых из крупнейших баз данных вокруг ... Может быть, попробуйте задать новый вопрос об общих ловушках, связанных с этой функцией (я не эксперт в этом), и вы можете получить простое исправление вместо полной перестройки вашей архитектуры поиска;)
Я знаю , что это не открытый исходный код, но это бесплатное и очень комплексное предложение от Microsoft:
Microsoft Search Server 2008 Express
Релевантность "из коробки".
Локализованный интерфейс.
Расширенные возможности поиска.
Нет предустановленных ограничений документа.
Индексирование непрерывного распространения.
Готовые соединители индексации
Сводные данные о содержании.
Подсветка попаданий.
Лучшие ставки и определения.
Исправление запроса.
Повторное сворачивание.
Фильтр по свойству.
Фильтр по языку.
Сортировать по дате.
Уведомления по электронной почте / RSS
Lucene.net is implemented in nHibernate, so if you also are looking for an O/R mapper, the combination may be worth a deeper check.
We currently develop a prototype and configuring Lucene is done in a bunch of minutes (we use fluent nhibernate).
If you don't really insist on .Net you can give Sphinx a try. Open source and available for all platforms (Windows / Linux).
После использования Lucene.Net в паре проектов, я также хотел бы добавить предложение о компиляции Java-версии lucene в код .net с помощью IKVM.NET . Он прекрасно работает, и вам никогда не придется беспокоиться о том, что версия Java устарела. У вас также есть возможность скомпилировать все дополнительные библиотеки и использовать их (я использую поисковые системы ГИС в одном проекте).