Вопросы SimpleLucene (все еще поддерживается, преимущество или поток памяти, объясните пример) - PullRequest
0 голосов
/ 10 февраля 2012

Я использую SimpleLucene v1.0 и Lucene.Net v2.9.2.2 .

Сейчас я изучаю примеры и у меня возникли проблемы.

Первая проблема заключалась в том, что пакет nuget для SimpleLucene не работает. Когда вы попытаетесь использовать его с их примерами, он не скомпилируется, поскольку ищет какую-то другую версию. Это привело меня к необходимости получить исходный код и просто извлечь .dll, предоставив мне вышеуказанные версии.

Я считаю, что Lucene.Net v2.9.2.2 не самая новая версия. Это и тот факт, что они не исправили проблему с Nuget, заставили меня усомниться в том, что они все еще занимаются ее разработкой.

В своем первом примере 1015 * они упоминают, что вы можете использовать MemoryIndexWriter.

Создать IIndexWriter. Для индексов файловой системы вы можете использовать DirectoryIndexWriter. Вы должны указать местоположение индекса. Примечание: A MemoryIndexWriter можно найти в проекте тестов (для записи в индекс в памяти)

Я искал тестовые файлы, но не уверен, как это работает. Мне интересно, может ли кто-нибудь объяснить преимущество или использовать MemoryIndexWriter по сравнению с простым хранением, а также предоставить простой пример того, как его использовать.

В них есть

 public ProductQuery WithKeywords(string keywords)
        {
            if (!string.IsNullOrEmpty(keywords))
            {
                string[] fields = { "name", "description" };
                var parser = new MultiFieldQueryParser(Version.LUCENE_29,
                    fields, new StandardAnalyzer(Version.LUCENE_29));
                Query multiQuery = parser.Parse(keywords);

                this.AddQuery(multiQuery);
            }
            return this;
        }

Может кто-нибудь объяснить мне, для чего предназначен массив полей. Я не понимаю, для чего он используется.

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

1 Ответ

1 голос
/ 11 февраля 2012

MemoryIndexWriter будет хранить весь индекс в оперативной памяти. Поэтому, как только ваша программа завершит работу, вы потеряете свой индекс. Я полагаю, что преимущество заключается в увеличении скорости индексации и поиска. DirectoryIndexWriter сохраняет индекс на диск, поэтому он будет работать медленнее, но у вас есть постоянный индекс. Что лучше, это зависит только от ваших конкретных требований.

Массив fields указывает, какие поля ваших документов вы будете искать. Обратите внимание, что они используют MultiFieldQueryParser.

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

...