SOLR является независимым сервером приложений для поиска на уровне предприятия, который предоставляет интерфейс API, похожий на веб-сервис. Пользователи могут отправлять XML -файлы определенного формата на сервер поисковых систем с помощью HTTP -запросов и генерировать индексы; Они также могут отправлять запросы на поиск через операции HTTP GET и получить результат возврата в формате XML/JSON. Разработано с использованием Java5 на основе Lucene.
Lucene является подпроектом 4 -й команды Jakarta Project of the Apache Software Foundation. Это полнотекстовый инструментарий поисковой системы с открытым исходным кодом, то есть это не полная полнотекстовая поисковая система, а полнотекстовая архитектура поисковой системы, обеспечивающая полный двигатель запросов и индексный двигатель, а также механизм анализа частичного текста (английские и немецкие западные языки).
Среди них основные принципы полнотекстового поиска Lucene соответствуют технологии в веб-поисковом курсе, которой преподают Го Джунданиу. Он использует сегментацию слов, семантическую грамматическую анализ, модель векторного пространства и другие технологии для ее достижения. Ниже приведено более подробное сообщение в блоге: http://www.cnblogs.com/guochunguang/articles/3641008.html
1. Общее обсуждение
Определение в соответствии с http://lucene.apache.org/java/docs/index.html:
Lucene-это эффективная полнотекстовая библиотека поиска на основе Java.
Поэтому, прежде чем вы поймете Lucene, вам нужно понадобиться некоторое время, чтобы узнать о полном текстовом поиске.
Так что же такое полнотекстовый поиск? Это начинается с данных в нашей жизни.
Данные в нашей жизни обычно делятся на два типа: структурированные данные и неструктурированные данные.
• Структурные данные: относится к данным с фиксированным форматом или конечной длиной, такими как базы данных, метаданные и т. Д.
• Неструктурированные данные: относится к данным с неопределенной длиной или без фиксированного формата, такого как электронные письма, документы Word и т. Д.
Конечно, в некоторых местах также будут упоминаться полуструктурированные данные третьего типа, такие как XML, HTML и т. Д., Когда они могут обрабатываться в соответствии со структурированными данными, или простой текст может быть извлечен для обработки в виде неструктурированных данных.
Неструктурированные данные также называются полнотекстовыми данными.
Согласно классификации данных, поиски также разделены на два типа:
• Поиск структурированных данных: например, поиск баз данных, используйте операторы SQL. Например, поиск метаданных, таких как использование поиска Windows для поиска имен файлов, типов, времени изменения и т. Д.
• Поиск неструктурированных данных: Например, поиск Windows также может искать содержимое файла, команду GREP в рамках Linux, и, например, с использованием Google и Baidu могут искать большое количество данных содержимого.
Существует два основных метода поиска неструктурированных данных, то есть полнотекстовые данные:
Одним из них является последовательное сканирование: так называемое последовательное сканирование, например, поиск файла с определенной строкой,-это смотреть на каждый документ за раз. Для каждого документа см. С самого начала до конца. Если этот документ содержит эту строку, то этот документ является файлом, который мы ищем, а затем посмотрите на следующий файл, пока все файлы не будут отсканированы. Если вы используете Windows для поиска, вы также можете найти содержимое файла, но это довольно медленно. Если у вас есть жесткий диск 80G, если вы хотите найти файл с определенной строкой на нем, боится, что вы не сможете сделать это, не потратив несколько часов. Это также то же самое для команд GREP под Linux. Вы можете подумать, что этот метод является относительно примитивным, но для файлов с небольшими объемами данных этот метод по -прежнему является самым прямым и удобным. Но для большого количества файлов этот метод очень медленный.
Некоторые люди могут сказать, что последовательное сканирование неструктурированных данных очень медленное, но поиск структурированных данных является относительно быстрым (поскольку структурированные данные имеют определенную структуру, определенный алгоритм поиска может использоваться для ускорения скорости), поэтому разве не достаточно, чтобы найти способ, чтобы наши неструктурированные данные имеют определенную структуру?
Эта идея естественна, но она формирует основную идею полнотекстового поиска, который состоит в том, чтобы извлечь часть информации в неструктурированных данных и реорганизовать ее, чтобы сделать его иметь определенную структуру, а затем искать данные с определенной структурой, чтобы достичь цели в поисках относительно быстрого.
Эта часть информации, извлеченной из неструктурированных данных, а затем реорганизована, называется индексом.
Это утверждение относительно абстрактно, и его легко понять, приведя несколько примеров. Например, словарь, таблица пиньина и таблица символов радикальной проверки словаря эквивалентны индексу словаря. Объяснение каждого персонажа неструктурировано. Если в словаре нет таблицы слогов и радикальной проверки символов, вы можете сканировать его только в огромном море слов. Тем не менее, некоторая информация слова может быть извлечена для структурированной обработки. Например, произношение относительно структурировано, разделено на инициалы и финалы, и есть только несколько типов, которые могут быть перечислены один за другим. Следовательно, произношение выводится и расположено в определенном порядке, и каждое произношение указывает на количество страниц подробного объяснения этого слова. Когда мы ищем, мы ищем произношение в соответствии со структурированным пиньином, а затем мы можем найти наши неструктурированные данные, то есть объяснение слов.
Этот процесс сначала создания индекса, а затем поиска индекса называется полнотекстовым поиском.
На рисунке ниже взята из «Lucene in Action», но не только описывает процесс поиска Lucene, но также описывает общий процесс полнотекстового поиска.
Полнотекстовый поиск обычно делится на два процесса: создание индекса (индексация) и индекс поиска (поиск).
• Создание индекса: процесс извлечения информации из всех структурированных и неструктурированных данных в реальном мире и создания индекса.
• Индекс поиска: это процесс получения запроса запроса пользователя, поиска созданного индекса, а затем возврата результата.
Поэтому в полном текстовом поиске есть три важных вопроса:
1. Что именно существует в индексе? (Индекс)
2. Как создать индекс? (Индексация)
3. Как искать индексы? (Поиск)
Ниже мы изучаем каждую проблему в последовательности.
2. Что именно существует в индексе
Что именно нужно хранить в индексе?
Во -первых, давайте посмотрим, почему последовательная скорость сканирования медленная:
Фактически, это вызвано несоответствием между информацией, которую мы хотим найти поиск, и информацией, хранящейся в неструктурированных данных.
Информация, хранящаяся в неструктурированных данных, - это то, что содержит каждый файл, то есть известные файлы, и относительно легко искать строки, то есть отображение от файла в строку. Информация, которую мы хотим найти, - это то, какие файлы содержат эту строку, то есть известную строку и желаемый файл, то есть отображение от строки в файл. Эти два точно наоборот. Поэтому, если индекс всегда может сохранить отображение от строки в файл, скорость поиска будет значительно улучшена.
Поскольку сопоставление из строки в файл является обратным процессом файла с сопоставлением строки, индекс, который хранит такую информацию, называется обратным индексом .
Сохраненная информация об обратном индексе, как правило, следующая:
Предположим, в моей коллекции документов есть 100 документов. Для удобства мы насмещаем документ от 1 до 100 и получаем следующую структуру.
Слева находится серия строк, называемых словари .
Каждая строка указывает на связанный список документа, содержащий эту строку, которая называется списком публикаций .
При индексации сохраненная информация соответствует поиску информации, которая может значительно ускорить поиск.
Например, если мы хотим найти документ, который содержит как строку «lucene», так и строку «solr», нам нужны только следующие шаги:
1. Удалите список ссылок на документ, содержащую строку «Lucene».
2. Удалите список ссылок документа, содержащую строку «solr».
3. Объединив связанный список, найдите файлы, которые содержат как «Lucene», так и «solr».
Видя это место, некоторые люди могут сказать, что полнотекстовый поиск ускоряет поиск, но с процессом дополнительного индексации эти два могут быть не намного быстрее, чем последовательное сканирование. Действительно, с процессом индексации полнотекстовый поиск не обязательно быстрее, чем последовательное сканирование, особенно когда объем данных невелик. Создание индекса на большом объеме данных также является очень медленным процессом.
Однако между ними все еще есть разница. Последовательное сканирование - это сканирование каждый раз, и процесс создания индекса должен быть только раз и навсегда. Каждый поиск, процесс создания индекса, не должен проходить, просто поиск созданного индекса.
Это также одно из преимуществ полнотекстового поиска по сравнению с последовательным сканированием: индексация один раз, используя несколько раз.
3. Как создать индекс
Процесс создания индекса полнотекстового поиска, как правило, имеет следующие шаги:
Шаг 1: Некоторые оригинальные документы, которые будут индексированы (документы).
Чтобы облегчить объяснение процесса создания индекса, здесь мы используем два файла в качестве примеров:
Подайте один: студентам должно быть разрешено выходить на улицу со своими друзьями, но не разрешать пить пиво.
Файл 2: Мой друг Джерри ходил в школу, чтобы увидеть своих учеников, но нашел их пьяными, что не разрешено.
Шаг 2: передайте оригинальный документ Tokenizer.
Слово причастие компонент (токенизатор) сделает следующие вещи (этот процесс называется Tokenize):
1. Разделите документ на отдельные слова.
2. Удалите знаки препинания.
3. Удалите слово «остановка».
Так называемое стоп-слово-одни из наиболее распространенных слов на языке. Поскольку он не имеет особого значения, в большинстве случаев это не может быть ключевым словом поиска. Следовательно, при создании индекса это слово будет удалено, а размер индекса будет уменьшен.
Английский останавливает слово, такое как: «», «A», «это» и т. Д.
Для токенизатора каждого языка есть набор остановских слов.
Результат, полученный после причастия слова (токенизатор), называется элементом слова.
В нашем примере мы получаем следующий элемент слова (токен):
«Студенты», «разрешен», «Go», «их», «друзья», «разрешен», «выпить», «пиво», «мой», «друг», «Джерри», «Пошел», «Школа», «См.», «Его», «Ученики», «найдено», «их», «пьян», «разрешен».
Шаг 3: Передайте полученный токен в компонент обработки языка (лингвистический процессор).
Компонент языковой обработки (лингвистический процессор) в основном имеет дело с полученными элементами слов (токенов).
Для английского языка компонент обработки языка (лингвистический процессор) обычно делает следующее:
1. Переключиться на строчный (строчный).
2. Уменьшите слово в корневую форму, такую как «автомобили» для «автомобиля» и т. Д. Эта операция называется: Stemming.
3. Преобразование слов в корневые формы, такие как «ездить» в «Драйд» и т. Д. Эта операция называется лемматизацией.
Сходства и различия между Stemming и Lemmatization:
• Symmetric: Stemming и Lemmatization делают словарный запас корневой формой.
• Два метода разные:
STEMMING применяет метод «сокращения»: «Автомобили» для «автомобиля», «езды» к «езду».
◦ Лемматизация принимает метод «преобразования»: «ездить», чтобы «ездить», «ездить» на «ездить».
• Алгоритмы двух разных:
STEMMING в основном принимает некоторый фиксированный алгоритм для выполнения этого сокращения, например, удаление «S», удаление «ing» и добавление «E», изменение «atational» на «ate» и изменение «tional» на «E».
◦ Лемматизация в основном использует метод сохранения определенного словаря, чтобы сделать это преобразование. Например, существуют сопоставления от «езды» до «езды», «ездить» на «ездить», «am», «быть» в «быть» в словаре. При трансформации просто посмотрите на словарь.
• Stemming и Lemmatization не являются взаимоисключающими отношениями, но имеют пересечения. Некоторые слова могут достичь одинакового преобразования, используя оба метода.
Результат лингвистического процессора называется термином.
В нашем примере, после обработки языка, полученное слово (термин) выглядит следующим образом:
«Студент», «позвольте», «Go», «их», «друг», «разрешить», «выпить», «пиво», «мой», «друг», «Джерри», «Go», «Школа», «См.», «Его», «Студент», «Найти», «Их», «Дра», «разрешить».
Именно из -за этапов обработки языка можно найти поиск диска, а также можно найти диск.
Шаг 4: Передайте полученное слово (термин) к компоненту индекса (индексатор).
Индексер в основном делает следующее:
1. Создайте словарь, используя полученное слово (термин).
В нашем примере словарь заключается в следующем:
Срок | Идентификатор документа |
Студент | 1 |
позволять | 1 |
идти | 1 |
Их | 1 |
друг | 1 |
позволять | 1 |
Напиток | 1 |
пиво | 1 |
Мой | 2 |
друг | 2 |
Джерри | 2 |
идти | 2 |
школа | 2 |
видеть | 2 |
его | 2 |
Студент | 2 |
Находить | 2 |
Они | 2 |
Напиток | 2 |
позволять | 2 |
2. Сортировать словарь в алфавитном порядке.
Срок | Идентификатор документа |
позволять | 1 |
позволять | 1 |
позволять | 2 |
пиво | 1 |
Напиток | 1 |
Напиток | 2 |
Находить | 2 |
друг | 1 |
друг | 2 |
идти | 1 |
идти | 2 |
его | 2 |
Джерри | 2 |
Мой | 2 |
школа | 2 |
видеть | 2 |
Студент | 1 |
Студент | 2 |
Их | 1 |
Они | 2 |
• Частота документов означает частоту документа, указывая, сколько файлов содержат это слово (термин).
• Частота означает частоту слов, что означает, что этот файл содержит несколько слов (термин).
Следовательно, для слова «разрешить» есть два документа, содержащих это слово (термин), поэтому есть два документа после списка документов после слова (термин). Первый элемент представляет собой первый документ, содержащий «разрешение», то есть документ 1. В этом документе «разрешить» появляется дважды, а второй элемент представляет второй документ, содержащий «разрешение», - это документ 2. В этом документе «разрешить» появляется один раз.
До сих пор индекс был создан, и мы можем быстро найти нужный документ через него.
И в процессе мы были удивлены, обнаружив, что также можно найти поиск «драйв», «вождения», «езды» и «езды». Потому что в нашем индексе «вождение», «езда» и «управляемое» все будут обрабатываются через язык и станут «драйв». При поиске, если вы введете «вождение», введенный оператор запроса также пройдет через один -три шага, а затем станет запросом «диск», чтобы вы могли искать желаемый документ.
3. Как искать индексы?
Кажется, что мы можем объявить: «Мы нашли нужную документацию».
Однако этот вопрос не закончился, и было обнаружено, что это был только один аспект полного текстового поиска. Не так ли? Если только один или десять документов содержат струны, которые мы задаем, мы нашли их. Но что, если есть тысяча или даже тысячи? Какой файл вы хотите больше всего?
Откройте Google, например, если вы хотите найти работу в Microsoft, вы вводите «Microsoft Job», и вы найдете в общей сложности 22600 000 результатов. Какое большое число, это была проблема, которая внезапно обнаружил, что это не было найдено, и слишком много были проблемой. С таким большим количеством результатов, как вы поставили наиболее актуальные на первое место?
Конечно, Google делает хорошую работу, вы найдете работу в Microsoft за один раз. Представьте себе, как было бы ужасно, если бы первые несколько были "Microsoft хорошо справляется с индустрией программного обеспечения ..."
Как найти наиболее важные заявления запроса среди тысяч результатов поиска, таких как Google?
Как определить корреляцию между поисковым документом и оператором запроса?
Это вернулось к нашему третьему вопросу: как искать индексы?
Поиск в основном разделен на следующие шаги:
Шаг 1: Пользователь входит в оператор запроса.
Запросные заявления имеют определенный синтаксис, как и наш обычный язык.
Различные операторы запроса имеют различный синтаксис, такие как операторы SQL, имеют определенный синтаксис.
Синтаксис оператора запроса варьируется в зависимости от реализации полнотекстовой системы поиска. Самые основные из них включают в себя: или, не и т. Д.
Например, оператор ввода пользователя: Lucene и выучились, а не Hadoop.
Объясните, что пользователь хочет найти документ, который содержит Lucene и изучен, но не включает Hadoop.
Шаг 2: Выполните лексический анализ, грамматический анализ и языковую обработку оператора запроса.
Поскольку утверждение запроса имеет синтаксис, также необходимо провести грамматический анализ, грамматический анализ и языковую обработку.
1. Лексический анализ в основном используется для определения слов и ключевых слов.
Как и в приведенном выше примере, после лексического анализа слова включают в себя Lucene, обучен, Hadoop и ключевые слова, а не.
Если в лексическом анализе найдено незаконное ключевое слово, возникнет ошибка. Например, Lucene AMD узнал, где AMD участвует в запросе как обычное слово из -за ошибок и.
2. Синтаксический анализ в основном образует синтаксисное дерево, основанное на грамматических правилах оператора запроса.
Если вы обнаружите, что оператор запроса не соответствует правилам синтаксиса, сообщается об ошибке. Если Lucene не изучен, произойдет ошибка.
Как и в приведенном выше примере, синтаксисное дерево, образованное Lucene, и выучено, что Hadoop не является следующим:
3. Обработка языка почти такая же, как и языковая обработка во время индексации.
Например, изучается и т. Д.
После второго шага мы получаем языковое синтаксисное дерево.
Шаг 3: Поиск индекса и получите документы, которые соответствуют синтаксическому дереву.
Этот шаг разделен на несколько небольших шагов:
1. Во -первых, в таблице обратного индекса найдите список ссылок на документ, содержащий Lucene, Learn и Hadoop.
2. Во -вторых, объединяйте связанные списки, содержащие Lucene, и научитесь получать связанный список документа, который содержит как Lucene, так и обучение.
3. Затем выполните разницу между этим связанным списком и связанным списком документа Hadoop, и удалите документ, содержащий Hadoop, чтобы получить список, связанный с документом, который содержит как Lucene, так и обучение и не содержит Hadoop.
4. Этот список ссылок на документ - документ, который мы ищем.
Шаг 4: Сортируйте результаты на основе корреляции между полученным документом и оператором запроса.
Хотя на предыдущем этапе мы получили желаемый документ, результаты запроса должны быть отсортированы по их корреляции с утверждением запроса, и чем более актуальны, тем выше, тем выше.
Как рассчитать корреляцию между документами и заявлениями запроса?
Лучше рассматривать заявление запроса как короткий документ и оценить актуальность между документами. Если корреляция с высокими оценками хороша, она должна быть ранжирована в первую очередь.
Итак, как вы оцениваете отношения между документами?
Это непростая задача. Во -первых, давайте посмотрим на оценку отношений между людьми.
Прежде всего, когда смотрит на человека, часто бывает много элементов , таких как личность, убеждения, хобби, одежда, рост, жирность и худость.
Во -вторых , для отношений между людьми разные элементы имеют разное значение . Характер, вера и хобби могут быть более важными. Одежда, высота и толчность могут быть не так важны. Поэтому люди с той же или похожей личностью, убеждениями и хобби, скорее всего, станут хорошими друзьями, но люди с различной одеждой, ростом и толчностью и худостью также могут стать хорошими друзьями.
Поэтому, судя по отношениям между людьми, мы должны сначала выяснить, какие элементы наиболее важны для отношений между людьми , такими как личность, убеждения и хобби. Во -вторых, нам нужно судить об отношениях между этими элементами двух людей , таких как у одного человека, есть веселая личность, у другого есть экстравертная личность, кто -то верит в буддизм, другой верит в Бога, один любит играть в баскетбол, а другой любит играть в футбол. Мы обнаружили, что оба они очень позитивны с точки зрения личности, добрых с точки зрения веры и спорта с точки зрения хобби, поэтому отношения между ними должны быть очень хорошими.
Давайте посмотрим на отношения между компаниями.
Во -первых, посмотрите на компанию, которая состоит из многих людей, таких как генеральный менеджер, менеджер, директор, обычные сотрудники, охранники, швейцар и т. Д.
Во -вторых, разные люди имеют разное значение для отношений между компаниями . Генеральные менеджеры, менеджеры и главные технические должностные лица могут быть более важными, а обычные сотрудники, охранники и швейцар могут быть менее важными. Поэтому, если отношения между генеральными менеджерами, менеджерами и главными технологическими сотрудниками двух компаний являются относительно хорошими, обе компании склонны иметь лучшие отношения. Однако, даже если у обычного сотрудника есть глубокая ненависть к обычным сотрудникам другой компании, маловероятно, что это повлияет на отношения между двумя компаниями.
Поэтому, чтобы судить о отношениях между компанией, мы должны сначала выяснить, кто наиболее важна для отношений между компанией , такими как генеральный менеджер, менеджер и директор по технологиям. Во -вторых, нам нужно судить о отношениях между этими людьми , которые не так хороши, как генеральные менеджеры двух компаний, менеджеры являются коллегами -жителями, а главные технологические сотрудники когда -то являются предпринимательскими партнерами. Мы обнаружили, что отношения между этими двумя компаниями хороши, будь то генеральный директор, менеджер или главный технологический директор, хороши, поэтому отношения между двумя компаниями должны быть хорошими.
После анализа двух отношений, давайте посмотрим, как судить о отношениях между документами .
Прежде всего, документ состоит из многих слов (термин) , таких как поиск, Lucene, полный текст, это, а, что и т. Д.
Во -вторых, другой термин имеет различное значение для взаимосвязи между документами . Например, для этого документа, поиска, Lucene, полнотекстового текста относительно важен, это, а, то, что может быть относительно неважным. Таким образом, если оба документа содержат поиск, Lucene и полный текст, корреляция между этими двумя документами лучше. Однако, даже если один документ содержит это, a, что, а другой документ не содержит этого, а, что, он не может повлиять на корреляцию между двумя документами.
Поэтому, чтобы судить о отношениях между документами, сначала выясните, какие слова (термин) являются наиболее важными для взаимосвязи между документами, такими как поиск, Lucene, Fulltext. Затем судите отношения между этими словами (термин).
Процесс выяснения важности слова (термина) для документа называется процессом расчета веса слова.
Есть два параметра для расчета веса термина. Первое - это слово (термин), а второе - документ (документ).
Вес слова указывает на важность этого слова в этом документе. Чем более важно слово (термин), тем больше вес (вес термина), и, следовательно, оно будет играть большую роль в расчете корреляции между документами.
Процесс оценки взаимосвязи между словами (термин) и таким образом получения корреляций документа используется для использования алгоритма модели векторного пространства (модель векторного пространства).
Давайте тщательно проанализируем эти два процесса:
1. Процесс расчета веса (термин вес).
Есть два основных фактора, которые влияют на важность слова (термин) в документе:
• Терминчата (TF): то есть, сколько раз этот термин появляется в этом документе. Чем больше TF, тем важнее это означает.
• Частота документов (DF): то есть, сколько документов содержат вторичный термин. Чем больше DF, тем менее важным это означает.
Это легко понять? Чем больше раз в документе появляется слово (термин), тем важнее оно для документа. Например, слово «поиск» появляется много раз в этом документе, что означает, что этот документ в основном рассказывает об этом аспекте. Однако в английском документе, если это появляется чаще, значит ли это, что это важнее? Нет, это корректируется вторым фактором. Второй фактор показывает, что больше документов содержат это слово (термин), это означает, что слово (термин) слишком обычное и недостаточно, чтобы отличить эти документы, поэтому тем менее важно оно.
Это также технология, которую мы изучаем программисты. Для самих программистов, чем глубже они овладевают этой технологией, тем лучше (чем глубже они освоены означает, что чем больше времени они проводят, тем больше TF) и чем более конкурентоспособны, когда они ищут работу. Тем не менее, для всех программистов, чем меньше людей, которые понимают эту технологию, тем лучше (чем меньше людей, которые ее понимают), и чем более конкурентоспособны они находят работу. Это причина, по которой человеческая ценность заключается в незаметном.
Как только правда понята, давайте посмотрим на формулу:
Это просто простая типичная реализация терминной формулы расчета веса. Люди, которые внедряют полнотекстовую систему поиска, будут иметь свою собственную реализацию, и Lucene немного отличается от этого.
2. Процесс оценки взаимосвязи между термином и получения корреляции документа, то есть алгоритма (VSM) модели векторного пространства.
Мы рассматриваем документы как серию слов (термин), каждое слово (термин) имеет вес (вес термина), а разные слова (термин) влияют на расчет оценки актуальности документа на основе их собственного веса в документе.
Таким образом, мы рассматриваем вес термина в этом документе как вектор.
Document = {term1, term2,…, term n}
Document Vector = {Wews1, Weight2, ..., Weight n}
Точно так же мы рассматриваем оператор запроса как простой документ, а также выражаем его в векторах.
Query = {term1, term 2,…, term n}
Query Vector = {Wews1, Weight2, ..., Weight n}
Мы помещаем все поисковые векторы документов и векторы запросов в n-размерное пространство, и каждое слово (термин) является одномерным.
Как показано на картинке:
Мы считаем, что чем меньше угол между двумя векторами, тем больше корреляция.
Поэтому мы рассчитываем значение косинуса включенного угла как оценку корреляции. Чем меньше угол, тем больше значение косинуса, тем выше оценка и тем выше корреляция.
Некоторые люди могут просить, чтобы операторы запроса обычно были очень короткими и содержали очень мало слов (термин), поэтому размеры вектора запроса очень малы, в то время как документ очень длинный, содержит много слов (термин), а размеры вектора документа очень велики. Почему размеры обоих на вашем графике n?
Здесь, поскольку вы хотите поместить его в одно и то же векторное пространство, естественные измерения одинаковы. Разное одновременно, возьмите союз двух. Если нет слова (термин), вес (вес термина) равен 0.
Формула оценки корреляции заключается в следующем:
Например, в заявлении запроса существует 11 терминов, и исходят три документа. Соответствующие веса (термин вес) следующие.
T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 | T11 | |
D1 | 0 | 0 | .477 | 0 | .477 | .176 | 0 | 0 | 0 | .176 | 0 |
D2 | 0 | .176 | 0 | .477 | 0 | 0 | 0 | 0 | .954 | 0 | .176 |
D3 | 0 | .176 | 0 | 0 | 0 | .176 | 0 | 0 | 0 | .176 | .176 |
Q. | 0 | 0 | 0 | 0 | 0 | .176 | 0 | 0 | .477 | 0 | .176 |
Следовательно, оценки корреляции между тремя документами и оператором запроса рассчитываются как:
Следовательно, документ 2 имеет самую высокую корреляцию, сначала возвращается, за которым следует документ 1, и, наконец, документ 3.
До сих пор мы можем найти документацию, которую мы хотим больше всего.
Сказав так много, я еще не вошел в Lucene, но это просто основная теория в поиске информации. Однако после того, как мы посмотрим на Lucene, мы обнаружим, что Lucene является основной практикой этой основной теории. Поэтому в статьях, анализирующих Lucene, мы часто увидим применение вышеупомянутой теории в Lucene.
Перед входом в Lucene краткая информация о создании и процессе поиска выше, как показано на рисунке:
Эта цифра относится к статье «Lucene, полная текстовая поисковая система открытого исходного кода» в http://www.lucene.com.cn/about.htm
1. Процесс индексации:
1) Есть серия индексированных файлов
2) Индексированный файл анализируется синтаксисом и обработка языка для формирования ряда слов (термин).
3) Создайте словарь и таблицу индекса обратного индекса посредством индексации.
4) Напишите индекс на жесткий диск с помощью индексного хранилища.
2. Процесс поиска:
а) Оператор запроса ввода пользователя.
б) ряд слов (термин) получена посредством грамматического анализа и языкового анализа утверждения запроса.
C) Получить дерево запросов с помощью анализа синтаксиса.
г) Прочитайте индекс в память через индексное хранилище.
e) Используйте дерево запросов для поиска индекса, чтобы получить список ссылок на документ для каждого слова (термин), отправить список ссылок на документ и получить документ результата.
f) Сортируйте поисковый документ результата до актуальности запроса.
G) вернуть результат запроса пользователю.
2. Сортировать словарь в алфавитном порядке.
Срок | Идентификатор документа |
позволять | 1 |
позволять | 1 |
позволять | 2 |
пиво | 1 |
Напиток | 1 |
Напиток | 2 |
Находить | 2 |
друг | 1 |
друг | 2 |
идти | 1 |
идти | 2 |
его | 2 |
Джерри | 2 |
Мой | 2 |
школа | 2 |
видеть | 2 |
Студент | 1 |
Студент | 2 |
Их | 1 |
Они | 2 |
3. объединить одни и те же слова (термин) в документ Reverse (список публикаций) Список ссылок.
В этой таблице есть несколько определений: