複製欄位
您可能希望以多種方式解讀某些文件欄位。Solr 有一種機制可以複製欄位,以便您可以將幾個不同的欄位類型應用於單一的輸入資訊。
您要複製的欄位名稱是來源,而副本的名稱是目的地。在 schema 檔案中,複製欄位非常簡單
<copyField source="cat" dest="text" maxChars="30000" />
在此範例中,我們希望 Solr 將 cat
欄位複製到名為 text
的欄位。欄位會在分析之前複製,這表示您可以擁有兩個具有相同原始內容的欄位,但它們使用不同的分析鏈,並且以不同的方式儲存在索引中。
在上面的範例中,如果 text
目的地欄位在輸入文件中本身具有資料,則 cat
欄位的內容將會新增為額外的值,就像所有值最初都是由客戶端指定的一樣。請記住,如果欄位最終會取得多個值(無論是來自多值來源還是來自多個 copyField
指令),請將其設定為 multivalued="true"
。
此功能的一個常見用法是建立單一的「搜尋」欄位,當使用者或客戶端未指定要查詢的欄位時,該欄位將作為預設查詢欄位。例如,title
、author
、keywords
和 body
可能都是預設情況下應該搜尋的欄位,每個欄位都有複製欄位規則,以複製到 catchall
欄位(例如,它可以命名為任何名稱)。稍後,您可以在 solrconfig.xml
中設定規則,以預設搜尋 catchall
欄位。這裡需要注意的是,當使用複製欄位時,您的索引將會增長。但是,這是否會對您造成問題以及最終大小將取決於要複製的欄位數量、要複製到的目的地欄位數量、使用的分析以及可用的磁碟空間。
maxChars
參數(一個 int
參數)建立了從來源值複製時,建構新增至目的地欄位的值時,要複製的字元數上限。當您想要從來源欄位複製一些資料,但也想要控制索引檔案的大小時,此限制非常有用。
copyField
的來源和目的地都可以包含前導或尾隨星號,這將符合任何內容。例如,以下行將符合萬用字元模式 *_t
的所有傳入欄位內容複製到 text 欄位。
<copyField source="*_t" dest="text" maxChars="25000" />
只有當 |
複製是在串流來源層級完成的,並且沒有複製會饋入另一個複製。這表示複製欄位不能鏈接,也就是說,您無法從 here
複製到 there
,然後從 there
複製到 elsewhere
。但是,相同的來源欄位可以複製到多個目的地欄位
<copyField source="here" dest="there"/>
<copyField source="here" dest="elsewhere"/>