Как Lucene работает

Я хотел бы узнать, как lucene ищут работы настолько быстро. Я не могу найти полезные документы о сети. Если у Вас есть что-нибудь (за исключением lucene исходного кода) для чтения, сообщить мне.

Текстовый поисковый запрос с помощью mysql5 текстовый поиск с индексом занимает приблизительно 18 минут в моем случае. lucene ищет тот же запрос, берет меньше, чем секунда.

87
задан jan 16 August 2012 в 18:01
поделиться

2 ответа

Lucene - это инвертированный полнотекстовый индекс. Это означает, что он берет все документы, разбивает их на слова, а затем строит индекс для каждого слова . Поскольку индекс является точным совпадением строки, неупорядоченный, он может быть очень быстрым. Гипотетически, неупорядоченный индекс SQL в поле varchar мог бы быть столь же быстрым, и на самом деле я думаю, вы обнаружите, что в этом случае большие базы данных могут выполнять простой запрос на равенство строк очень быстро.

Lucene не требует оптимизации для обработки транзакций. Когда вы добавляете документ, нет необходимости гарантировать, что запросы увидят его мгновенно . И его не нужно оптимизировать для обновления существующих документов.

Однако, в конце концов, если вы действительно хотите знать, вам нужно прочитать источник. В конце концов, обе вещи, на которые вы ссылаетесь, имеют открытый исходный код.

73
ответ дан 24 November 2019 в 07:50
поделиться

Одним словом: индексация.

Lucene создает индекс вашего документа, который позволяет выполнять поиск намного быстрее.

Это такое же различие между структурой данных списка O (N) и структурой данных хэш-таблицы O (1).Список должен пройти через всю коллекцию, чтобы найти то, что вам нужно. В хэш-таблице есть индекс, который позволяет точно определить, где находится нужный элемент, и просто извлечь его.

Обновление:

Я не совсем понимаю, что вы имеете в виду под словами «поиск по индексу Lucene намного быстрее, чем поиск по индексу mysql».

Я предполагаю, что вы используете MySQL «WHERE document LIKE '% фраза%'» для поиска документа. Если это правда, то MySQL должен сканировать таблицу для каждой строки, которая будет O (N).

Lucene может разобрать документ на токены, сгруппировать их в n-граммы по вашему указанию и вычислить индексы для каждого из них. Это O (1), чтобы найти слово в проиндексированном документе Lucene.

18
ответ дан 24 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: