2015-11-26 26 views
1

全部,請原諒我剛開始學習如何使用SOLR。強大的SE。 而且我已經知道Inverted IndexSOLR中搜索速度如此之快的原因。在很多人看來。像Solr in actionApache Solr search pattern。倒像索引如下所述和描述。SOLR中倒排索引的數據結構究竟是什麼樣子

enter image description here

而且我也知道DocumentFields。 在我對上述數據結構的理解。當用像「哈利」這樣的特定術語進行搜索時。 SE將返回結果文件1,2。我對此毫無疑問。當我讀guide from apache。它說

分析發生在兩個上下文中。在索引時,當創建一個字段 時,分析結果得到的標記流將被添加到 索引中,併爲該字段定義一組術語(包括位置,大小和 等等)。在查詢時間,搜索的值是 分析和結果的條款匹配存儲在字段的索引 。

我對這個閱讀感到困惑。

倒排索引是否指向文檔或字段? 在我提到的圖中。它沒有提到有關領域的任何事情。它只是說索引指向文檔ID。 但在我引用的閱讀。它確實告訴我們倒排索引指向的是字段而不是文檔。 (如果我錯了,請糾正我。) 謝謝。

回答

0

我可能會理解你的困惑,如果你想理解solr搜索,索引,分析,我認爲你必須先學習lucene。
爲什麼?因爲solr是基於lucene的,所以這是一個lucene的wiki網址,它可以幫助你! lucene wiki

1

讓我們用你上面提到的例子。我們有2個文件:

Doc1: Harry Potter And The Half Blood Prince 

Doc2: Harry Potter And The Deathly Hallows 

要建立倒排索引

  • 步驟1 - 我們需要這些記號化文檔與一個標記條款。 所以,我們說,我們使用標記生成器一個,並得到如下結果:

    文檔1:HarryPotterAndTheHalfBloodPrince

    文檔2:HarryPotterAndTheDeathlyHallows

  • 第2步 - 建立倒排索引

    Harry - >文檔1,文檔2

    Potter - >文檔1,文檔2

    And - >文檔1,文檔2

    The - >文檔1,文檔2

    Half - >文檔1

    Blood - > Doc1

    Prince - >文檔1

    Deathly - >文檔2

    Hallows - >文檔2

要查詢/搜索

  • 步驟1 - 我們還需要首先標記搜索詞

    例如,我們的搜索詞是Harry Potter。你有兩個 標記器可供選擇。 Tokenizer A與我們在 索引過程中使用的一樣,會將我們的詞彙分成兩個字詞:HarryPotter。但Tokenzier B可以將它們標記爲Harry Potter

  • 步驟2 - 做查詢

    如果選擇分詞器A,你HarryPotter,他們都在我們的倒排索引,那麼你就可以得到搜索結果:文檔1和文檔2。 但是,如果您選擇Tokenizer B,則會獲得不在我們的倒排索引中的術語Harry Potter,這意味着您無法從倒排索引檢索任何結果。

結論:Solr中/ Lucene的一切都索引和搜索是基於術語 。您可以選擇不同的斷詞/過濾器或 索引或搜索過程中一起將它們組合起來,你會得到 不同方面的輸出。請參閱此 http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters/。 它可以幫助您設計您的solr取決於您的具體要求 。

+0

是的,它是從action'像'Solr的教程最流行的例子,'AppacheSolrSearchPattern'試圖解釋有關搜索如何工作的問題,以及如何索引結構的模樣。但我認爲這只是一些理論上的例子。這不是反映現實世界的人。我相信它應該比你向我展示的例子更復雜。謝謝。 –

+0

我的問題是在做搜索時。場的用途是什麼?你給我看的例子沒有提到有關該領域的任何信息。 –

0

在第一次近似中,倒排索引只是按照(從法律到高度)排列的文檔id數組。它允許您在搜索幾個詞時快速交叉和組合文檔ID。爲了提供更快的交集,甚至比線性時序,它包含了skip pointers,你可以在一本書Introduction to Information Retrieval讀到它。本書對普通搜索引擎如何工作有很好的介紹。爲了減少磁盤操作和索引大小的I/O,使用了一些壓縮機制,本書中還可以閱讀introduction to them

1

我明白你的困惑,這是地方文獻解釋過在手,簡化這些案件之一。大多數文獻使用文本解釋和倒排索引,因此(如圖所示),一個文檔只是一個字符序列,並且不存在其他「字段」。

這時候你解釋倒排索引是什麼,但是當你有一個實際的實施方式進行交互(如通過Lucene的/ ES/Solr中提供的一個),現實的情況是有點不同變得非常有用。

也許this post可能是有用的,如果你一路下來,閱讀是有點密集的,但如果你只是試圖掌握要領,並不試圖在一次閱讀中理解所有內容。請指教,Lucene實現包含更多技術細節,以確保性能和減少磁盤使用量等。底線是基本上每個領域本身就像一個「迷你倒排索引」,並允許知道文檔中哪個特定的「部分/字段」與您的查詢發生匹配,因此您可以影響您的相應地得分(通常是如何排序結果)。如果你總是有平面文件,那麼搜索引擎就不會那麼有用。

+0

謝謝你的理解。 +1第一句話。 –

+0

你能查看鏈接嗎?它被打破。返回404 .. Thanks.http://hackerlabs.org/blog/2011/10/01/hacking-lucene-the-index-format/ –

+0

WOW!對此感到遺憾,當我發佈回覆時,網站沒有問題,嘗試使用緩存的Google版本,爲我工作。 –