複製欄位

您可能希望以多種方式解讀某些文件欄位。Solr 有一種機制可以複製欄位,以便您可以將幾個不同的欄位類型應用於單一的輸入資訊。

您要複製的欄位名稱是來源,而副本的名稱是目的地。在 schema 檔案中,複製欄位非常簡單

<copyField source="cat" dest="text" maxChars="30000" />

在此範例中,我們希望 Solr 將 cat 欄位複製到名為 text 的欄位。欄位會在分析之前複製,這表示您可以擁有兩個具有相同原始內容的欄位,但它們使用不同的分析鏈,並且以不同的方式儲存在索引中。

在上面的範例中,如果 text 目的地欄位在輸入文件中本身具有資料,則 cat 欄位的內容將會新增為額外的值,就像所有值最初都是由客戶端指定的一樣。請記住,如果欄位最終會取得多個值(無論是來自多值來源還是來自多個 copyField 指令),請將其設定為 multivalued="true"

此功能的一個常見用法是建立單一的「搜尋」欄位,當使用者或客戶端未指定要查詢的欄位時,該欄位將作為預設查詢欄位。例如,titleauthorkeywordsbody 可能都是預設情況下應該搜尋的欄位,每個欄位都有複製欄位規則,以複製到 catchall 欄位(例如,它可以命名為任何名稱)。稍後,您可以在 solrconfig.xml 中設定規則,以預設搜尋 catchall 欄位。這裡需要注意的是,當使用複製欄位時,您的索引將會增長。但是,這是否會對您造成問題以及最終大小將取決於要複製的欄位數量、要複製到的目的地欄位數量、使用的分析以及可用的磁碟空間。

maxChars 參數(一個 int 參數)建立了從來源值複製時,建構新增至目的地欄位的值時,要複製的字元數上限。當您想要從來源欄位複製一些資料,但也想要控制索引檔案的大小時,此限制非常有用。

copyField 的來源和目的地都可以包含前導或尾隨星號,這將符合任何內容。例如,以下行將符合萬用字元模式 *_t 的所有傳入欄位內容複製到 text 欄位。

<copyField source="*_t" dest="text" maxChars="25000" />

只有當 source 參數也包含萬用字元時,copyField 指令才能在 dest 參數中使用萬用字元 (*)。copyField 使用來自來源欄位的相符 glob 作為 dest 欄位名稱,來源內容將複製到其中。

複製是在串流來源層級完成的,並且沒有複製會饋入另一個複製。這表示複製欄位不能鏈接,也就是說,您無法here 複製到 there,然後從 there 複製到 elsewhere。但是,相同的來源欄位可以複製到多個目的地欄位

<copyField source="here" dest="there"/>
<copyField source="here" dest="elsewhere"/>