Поиск Lucene среди разных наборов данных - PullRequest
0 голосов
/ 07 ноября 2018

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

вот фрагмент кода для создания индекса оперативной памяти

final Analyzer analyzer = new StandardAnalyzer();
final Directory index = new RAMDirectory();
final IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
try (final IndexWriter writer = new IndexWriter(index, config)) {

    addTableDocuments(tables, writer);
    addColumnDocuments(columns, writer);
    addValueDocuments(values, writer);
}

вот фрагмент кода для поиска по индексу

try (final IndexReader reader = DirectoryReader.open(index)) {

    final IndexSearcher searcher = new IndexSearcher(reader);
    final DuplicateFilter duplicateFilter = new DuplicateFilter(LuceneUtils.LUCENE_DOCUMENT_TITLE);
    duplicateFilter.setKeepMode(DuplicateFilter.KeepMode.KM_USE_LAST_OCCURRENCE);

    final ScoreDoc[] scoreDocs = searcher.search(query, duplicateFilter, limit).scoreDocs;

    final List<Document> documents = new ArrayList<>();
    for (ScoreDoc scoreDoc : scoreDocs) {

        final int docId = scoreDoc.doc;
        final Document document = searcher.doc(docId);
        documents.add(document);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...