Sobes.tech
Senior
31

Что такое Lucene и какие у него ключевые структуры?

Companies where asked
VK CloudVK Cloud

Answer from AI

sobes.tech AI

Apache Lucene — это высокопроизводительная библиотека для полнотекстового поиска и индексирования, написанная на Java. Она используется для создания поисковых систем и обеспечивает быстрый поиск по большим объемам текстовых данных.

Ключевые структуры Lucene:

  • Индекс (Index) — основная структура, в которой хранятся проиндексированные документы. Индекс состоит из сегментов, каждый из которых представляет собой отдельный обратный индекс.
  • Документ (Document) — единица данных, которую индексируют. Документ состоит из полей.
  • Поле (Field) — часть документа, содержащая текст или другие данные, которые можно индексировать или хранить.
  • Обратный индекс (Inverted Index) — структура, позволяющая быстро находить документы по терминам. Для каждого термина хранится список документов, где он встречается.
  • Токенизатор (Tokenizer) — компонент, разбивающий текст на токены (слова) для индексирования.
  • Анализатор (Analyzer) — совокупность токенизатора и фильтров, преобразующих текст для индексирования и поиска.

Пример использования Lucene для создания индекса и поиска:

// Создание индекса
Directory dir = FSDirectory.open(Paths.get("indexDir"));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter writer = new IndexWriter(dir, config);

Document doc = new Document();
doc.add(new TextField("content", "пример текста для индексации", Field.Store.YES));
writer.addDocument(doc);
writer.close();

// Поиск
DirectoryReader reader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("content", analyzer);
Query query = parser.parse("текста");
TopDocs results = searcher.search(query, 10);
for (ScoreDoc sd : results.scoreDocs) {
    Document d = searcher.doc(sd.doc);
    System.out.println(d.get("content"));
}
reader.close();