Как именно выглядит структура данных инвертированного индекса в SOLR

Все, простите я только начинаю учиться работать с SOLR. Мощный СЭ. И я уже знал, что Inverted Index является причиной того, что поиск в SOLR такой быстрый. Во многих читал. Как Solr in action, Apache Solr search pattern. Перевернутый индекс упоминается и описывается, как показано ниже.

введите здесь описание изображения

И я также знал, что Document состоит из Fields. В моем понимании приведенной выше структуры данных. При поиске по определенному термину, например «Гарри». SE вернет результирующий документ 1,2. У меня нет с этим вопросов.

Но когда я прочитал руководство от apache. Это говорит

Анализ происходит в двух контекстах. Во время индексации, когда поле создается, поток маркеров, полученный в результате анализа, добавляется в индекс и определяет набор терминов (включая позиции, размеры и т. д.) для поля. Во время запроса искомые значения анализируются, и полученные в результате условия сопоставляются с теми, которые хранятся в индексе поля.

Меня смущает это чтение.

Указывает ли перевернутый индекс на документ или поле? На схеме которую я указал. Про поле ничего не сказано. Он просто сказал, что индекс указывает на идентификатор документа. Но в прочитанном я процитировал. Это говорит нам, что перевернутый индекс указывает на поле, а не на документ. (Если я был неправ. Пожалуйста, поправьте меня.) Спасибо.


person Joe.wang    schedule 26.11.2015    source источник


Ответы (4)


Я понимаю ваше замешательство, это один из тех случаев, когда литература объясняет чрезмерное упрощение рассматриваемого предмета. Большая часть литературы объясняет и инвертированный индекс с использованием документов, которые являются просто текстом, поэтому (как показано на рисунке) один документ представляет собой только последовательность символов, и никаких других «полей» не существует.

Это становится полезным, когда вы объясняете, что такое инвертированный индекс, но когда вы взаимодействуете с реальной реализацией (например, предоставленной Lucene/ES/Solr), реальность немного отличается.

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

Суть в том, что в основном каждое поле похоже на «мини-инвертированный индекс» само по себе и позволяет узнать, в какой конкретной «части/поле» вашего документа произошло совпадение с вашим запросом, поэтому вы можете влиять на свою оценку (обычно как результаты упорядочены) соответственно. Если бы у вас всегда были плоские документы, поисковая система не была бы так полезна.

person Jorge Luis    schedule 01.12.2015
comment
Спасибо за понимание. +1 За первое предложение. - person Joe.wang; 02.12.2015
comment
Не могли бы вы проверить ссылку? Это сломано. вернуть 404.. Спасибо. /2011/10/01/hacking-lucene-the-index-format - person Joe.wang; 02.12.2015
comment
ВОТ ЭТО ДА! извините за это, сайт был в порядке, когда я отправил ответ, попробуйте использовать кешированную версию Google, у меня сработало. - person Jorge Luis; 03.12.2015
comment
ЛОЛ, Замечательно! Все вещи есть то, что я искал. Спасибо, ваш замечательный кусок. - person Joe.wang; 03.12.2015

Я могу понять ваше замешательство, если вы хотите понять, что такое поиск solr, индексация, анализ, я думаю, вы должны сначала изучить lucene.
почему? поскольку solr основан на lucene, это URL-адрес вики lucene, он может вам помочь! вики Lucene

person Qin Dong Liang    schedule 26.11.2015

Давайте использовать пример, который вы упомянули выше. У нас есть 2 документа:

Doc1: Harry Potter And The Half Blood Prince

Doc2: Harry Potter And The Deathly Hallows

Чтобы построить инвертированный индекс

  • Шаг 1. Нам нужно преобразовать эти документы в термины с помощью токенизатора. Итак, допустим, мы используем Tokenizer A и получаем следующие результаты:

    Документ 1: Harry, Potter, And, The, Half, Blood, Prince

    Док2: Harry, Potter, And, The, Deathly, Hallows

  • Шаг 2. Построение инвертированного индекса

    Harry -> Док1, Док2

    Potter -> Док1, Док2

    And -> Док1, Док2

    The -> Док1, Док2

    Half -> Документ1

    Blood -> Документ1

    Prince -> Документ1

    Deathly -> Документ2

    Hallows -> Документ2

Для запроса/поиска

  • Шаг 1. Сначала нам также нужно разбить поисковые слова.

    Например, наши поисковые слова Harry Potter. И у вас есть два токенизатора на выбор. Токенизатор A такой же, как и тот, который мы используем при индексировании, будет разбивать наши слова на два термина: Harry и Potter. Но Tokenzier B может токензировать их только на срок Harry Potter.

  • Шаг 2. Сделайте запрос

    Если вы выберете Tokenizer A, вы получите Harry и Potter, оба они находятся в нашем инвертированном индексе, тогда вы можете получить результаты поиска: Doc1 и Doc2. Но если вы выберете Tokenizer B, вы получите терм Harry Potter, которого нет в нашем инвертированном индексе, это означает, что вы не можете получить какие-либо результаты из инвертированного индекса.

Заключение. Все в Solr/Lucene, как индексация, так и поиск, основаны на терминах. Вы можете выбрать разные токенизаторы/фильтры или комбинировать их вместе во время индексации или поиска, и вы получите разные результаты терминов. См. это http://Conclusion:%20%20Everything%20in%20Solr/Lucene%20both%20indexing%20and%20search%20are%20based%20on%20terms.%20%20You%20can%20choose%20различных%20токенизаторов/фильтров%20или%20объединить%20их%20вместе%20вовремя%20индексирования%20или%20поиска,%20и%20вы%20будете%20получать%20различные%20условия%20вывод.%20%20Пожалуйста%20отправьте%20это%20http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters/.%20%20This%20can%20help%20you%20to%20design%20your%20solr%20зависит%20от%20ваших%20конкретных%20требований.. Это может помочь вам разработать свой solr в зависимости от ваших конкретных требований.

person Zhitao Yue    schedule 27.11.2015
comment
Да, это самый популярный пример из учебника, например Solr in action, AppacheSolrSearchPattern, пытающийся объяснить вопрос о том, как работает поиск и как выглядит структура индекса. Но я думаю, что это просто какой-то теоретический пример. Это не то, что отражает реальный мир. Я считаю, что это должно быть сложнее, чем пример, который вы мне показали. Спасибо. - person Joe.wang; 30.11.2015
comment
У меня вопрос при поиске. Какая польза от поля? В примере, который вы мне показываете, ничего не упоминается о поле. - person Joe.wang; 30.11.2015

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

person Alexander Kuznetsov    schedule 27.11.2015