2014年10月27日 星期一

Solr_05_03_Copying Fields

Copying Fields


有時可能需要解釋 field 的方式不止一種型別領域。在Solr有一個機制可以製作出field的副本,以方便可以申請多個不同的field類型做為單一文件的導入信息。
在下方範例中將source填入已定義好的field name(field element),而dest指定新的field name(field element)
在schema.xml中可以非常簡單製作field的複印件 
e.g
<!-- cat原本類型,索引、儲存、多值型 -->
<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
<!-- cat新的類型,索引、多值型 -->
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
...
<!-- 將 field "cat" 複製導向 field "text" -->
<copyField source="cat" dest="text" maxChars="30000" />
...
<!-- 原本cat field type-->
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<!-- 新的cat field type -->
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  ...
</fieldType>
如果在原本已有的field type 情況之下 ,cat field 的內容將被 text field 做為附加的價值內容,就像客戶端將所有的值指定在同一份文件上。
需要注意的一點就是,如果最後會得到多個值,請記得要配置 multiValued="true" (無論是從一個多值的source,或多個copyField ...等等)

maxChars屬性參數
 輸入的值限定為int型態,該參數規定了從source複製值至dest時字符數的上限。
在某種情況下,當你想要從source進行複製又想同時控制索引文件的大小時,限制字符數是非常有用的 。

source 和 dest 的內容可以包含任何的前綴、後綴 * 號,他將匹配任何相關符何的field。
例如下方案例:
<copyField source="*_t" dest="text" maxChars="25000" />

The copyField command can use a wildcard (*) character in the dest parameter only if the source para
meter contains one as well. copyField uses the matching glob from the source field for the dest field
name into which the source content is copied.

沒有留言:

張貼留言