Как работает Луцен

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

Текстовый поисковый запрос с использованием текстового поиска mysql5 с индексом занимает около 18 минут в моем случае. Поиск lucene для одного и того же запроса занимает менее секунды.

Ответ 1

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

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

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

Ответ 2

Lucene создает большой индекс. Индекс содержит слово id, количество документов, где присутствует слово, и положение слова в этих документах. Поэтому, когда вы даете один запрос слова, он просто ищет временную сложность индекса (O (1)). Затем результат оценивается с использованием разных алгоритмов. Для многословного запроса просто возьмите пересечение множества файлов, в которых присутствуют слова. Таким образом, Lucene очень быстро.

Подробнее читайте в этой статье разработчиками Google http://infolab.stanford.edu/~backrub/google.html

Ответ 3

Словом: индексирование.

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

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

Обновление:

Я не уверен, что вы подразумеваете под "поиском индекса Lucene намного быстрее, чем поисками индекса mysql".

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

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