文件、欄位和結構描述設計
Solr 的基本前提很簡單。您將大量的資訊提供給它,然後稍後您可以向它提出問題並找到您想要的資訊片段。
您輸入所有資訊的部分稱為索引或更新。當您提出問題時,它稱為查詢。
了解 Solr 如何運作的一種方法是將其視為活頁食譜書。每次您將食譜新增至書中時,您都會更新後面的索引。您會列出每個食材以及您剛新增的食譜的頁碼。假設您新增了一百個食譜。使用索引,您可以非常快速地找到所有使用鷹嘴豆、朝鮮薊或咖啡作為食材的食譜。使用索引比逐一查看每個食譜快得多。想像一本有一千個食譜或一百萬個食譜的書。
Solr 允許您使用許多不同的欄位或輸入類型來建立索引。上面的範例說明如何僅使用一個欄位 `ingredients` 建立索引。您可以在索引中擁有其他欄位,用於表示食譜的烹飪風格,例如 `Asian`、`Cajun` 或 `vegan`,並且您可以擁有一個索引欄位,用於表示準備時間。Solr 可以回答諸如「哪些以血橙為食材且可在 30 分鐘內準備好的 Cajun 風格食譜?」之類的問題。
結構描述是您告訴 Solr 應如何從輸入文件建立索引的地方。
Solr 如何看待世界
Solr 的基本資訊單位是文件,它是一組描述事物的資料。食譜文件會包含食材、說明、準備時間、烹飪時間、所需工具等等。例如,關於一個人的文件可能包含該人的姓名、傳記、最喜歡的顏色和鞋子尺寸。關於一本書的文件可能包含書名、作者、出版年份、頁數等等。
在 Solr 的世界中,文件是由欄位組成,這些欄位是更具體的資訊片段。鞋子尺寸可以是一個欄位。名字和姓氏可以是欄位。
欄位可以包含不同類型的資料。例如,姓名欄位是文字(字元資料)。鞋子尺寸欄位可能是浮點數,因此它可以包含 6 和 9.5 之類的值。顯然,欄位的定義是彈性的(例如,您可以將鞋子尺寸欄位定義為文字欄位而不是浮點數),但是如果您正確定義欄位,Solr 將能夠正確解譯它們,並且您的使用者在執行查詢時將獲得更好的結果。
您可以透過指定欄位的欄位類型來告訴 Solr 欄位包含的資料類型。欄位類型會告知 Solr 如何解讀欄位及其查詢方式。
當您新增文件時,Solr 會取得文件中欄位的資訊,並將該資訊新增至索引。當您執行查詢時,Solr 可以快速查閱索引並返回匹配的文件。
欄位分析
欄位分析會告知 Solr 在建立索引時如何處理傳入的資料。這個過程更精確的名稱應該是處理甚至是消化,但官方名稱是分析。
舉例來說,考慮一個人文件中的傳記欄位。傳記中的每個字都必須被索引,以便您可以快速找到生活中與番茄醬、蜻蜓或密碼學相關的人。
然而,傳記可能包含許多您不關心且不希望塞滿索引的單字,例如「the」、「a」、「to」等等。此外,假設傳記中包含單字「Ketchup」,在句子開頭大寫。如果使用者查詢「ketchup」,您希望 Solr 告訴您關於此人的資訊,即使傳記中包含大寫的單字。
這兩個問題的解決方案是欄位分析。對於傳記欄位,您可以告訴 Solr 如何將傳記拆分成單字。您可以告訴 Solr 您希望將所有單字變成小寫,並且可以告訴 Solr 移除重音符號。
欄位分析是欄位類型的重要組成部分。Solr 中的文件分析詳細描述了欄位分析。
Solr 的 Schema 檔案
Solr 將有關欄位類型和預期理解的欄位詳細資訊儲存在 schema 檔案中。此檔案的名稱為 managed-schema.xml
或 schema.xml
。差異取決於您計劃如何在安裝中管理 Solr 的 schema:以程式方式或手動編輯。
關於 schema 的一個重要事實是,它是一個 Solr 概念。索引中的實際資料儲存在 Lucene 中,而 Lucene 沒有 schema 的概念。這表示對 schema 檔案的變更不會對已儲存在索引中的資料產生任何影響。事實上,在沒有重新索引資料的情況下變更 schema 可能會導致索引出現嚴重問題,以至於唯一的解決方案是完全重新索引您的資料。
最好能嘗試思考您計畫索引的資料:它是什麼樣的資料?您希望如何搜尋它?文件中的欄位將如何向使用者顯示?
如果您還不確定,請計畫執行一些測試索引,以了解您文件中資料使用預設設定建立索引的方式。在您的實作計畫中安排一些迭代時間,並從小處著手。在索引所有文件之前,您越能定義您的 schema,您的使用者獲得成功搜尋應用程式的機會就越高。
有關 schema 的更多資訊,請參閱Schema 元素章節。