2015-11-26 3 views
1

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

enter image description here

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

Но когда я прочитал guide from apache. В нем говорится:

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

Я смущен этим.

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

ответ

0

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

1

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

Doc1: Harry Potter And The Half Blood Prince 

Doc2: Harry Potter And The Deathly Hallows 

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

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

    doc1: Harry, Potter, And, The, Half, Blood, Prince

    doc2: Harry, Potter, And, The, Deathly, Hallows

  • Этап 2 - Построить инвертированный указатель

    Harry -> doc1, doc2

    Potter -> doc1, doc2

    And -> doc1, doc2

    The -> doc1, doc2

    Half -> doc1

    Blood -> Doc1

    Prince -> doc1

    Deathly -> doc2

    Hallows -> doc2

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

  • Шаг 1 - Нам также нужно tokenize слова поиска сперва

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

  • Шаг 2 - Есть ли запрос

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

Заключение: Все в Solr/Lucene и индексации и поиска являются на условиях.Вы можете выбрать различные токенизаторы/фильтры или объединить их во время индексирования или поиска, и вы получите выводов разных терминов. Пожалуйста, обратитесь к этому http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters/. Это может помочь вам спроектировать ваш solr, зависит от ваших конкретных требований .

+0

Да, это самый популярный пример из учебника, такого как «Solr in action», 'AppachSolrSearchPattern', который пытается объяснить проблему с тем, как работает поиск, и как выглядит структура индекса. Но я думаю, что это просто какой-то теоретический пример. Это не тот, который отражает реальный мир. Я считаю, что это должно быть более сложным, чем пример, который вы мне показали. Благодарю. –

+0

Мой вопрос в этом случае поиск. Что такое использование поля? Пример, который вы мне показываете, ничего не упоминал о поле. –

0

В первом приближении инвертированный индекс является только упорядоченным (от закона к высоте) массивом идентификаторов документов. Это позволяет совершать быстрые перекрестки и объединения идентификаторов документов при поиске нескольких условий. Чтобы обеспечить более быстрое пересечение, даже линейное время, оно содержит skip pointers, вы можете прочитать об этом в книге Introduction to Information Retrieval. Эта книга - отличное введение в то, как работает общая поисковая система. Для уменьшения ввода/вывода для операций с дисками и размера индекса используются некоторые механизмы сжатия, вы также можете прочитать introduction to them также в этой книге.

1

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

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

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

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

+0

Спасибо за понимание. +1 Для первого предложения. –

+0

Не могли бы вы проверить ссылку? Это сломано. return 404 .. Thanks.http: //hackerlabs.org/blog/2011/10/01/hacking-lucene-the-index-format/ –

+0

WOW! извините за это, сайт был в порядке, когда я отправил ответ, попробуйте использовать кэшированную версию Google, работал для меня. –

Смежные вопросы