marx-software.de

Lucene Utils

Hier gibt es einige kleiner Helferlein rund um Apache Lucene.

bitte forken: lucene-utils on github

MultiSearcherManager

Hat man viele oder große Daten, ist es in Lucene gängige Praxis, diese über mehrer Indizes zu verteilen. Lucene bietet zum lesen dann einen MultiReader an, mit dem aus mehreren Indizes gelesen werden kann. Leider gibt es aber aber von Hause aus keine SearchManager, der mit dieser Situation umgehen kann. Aus diesem Grund habe ich den MultiSearchManager erstellt.

List<IndexReader> readers = List.of(
	DirectoryReader.open(dir1),
	DirectoryReader.open(dir2)
);
MultiSearcherManager sm = new MultiSearcherManager(readers.toArray(IndexReader[]::new));

// add, remove or update documents

sm.maybeRefreshBlocking();	
	
IndexSearcher searcher = sm.acquire();
try {
	int count = searcher.count(new MatchAllDocsQuery());
	System.out.println(count);
} finally {
	sm.release(searcher);
}

sm.close();

ShardedIndex

Der ShardedIndex hilft dabei, Datenmenge zu indizieren, die den Rahmen eines einzelnen Index sprengen würden.

ShardedIndex shardedIndex = ShardedIndexConfiguration.builder()
	.numberOfShards(5)														// the number of shards
	.strategy(new ShardSizeShardingStrategy())								// the sharding strategy
	.shardsDirectory(Path.of("index-directory"))							// base directory where all shards will be stored
	.shardConfiguration(ShardConfiguration.builder()						// configuration for the shards
			.analyzer(new StandardAnalyzer())
			.build()
	).build();

shardedIndex = new ShardedIndex(config);
shardedIndex.open();

// use MultiSearchManager to access the shards
IndexSearcher searcher = shardedIndex.getSearcherManager().acquire();
try {
	// search as usual
} finally {
	shardedIndex.getSearcherManager().release(searcher);
}

shardedIndex.close();