Field、CopyField、DynamicField的一些簡介,用法

Field: post

   Field就是一個字段,定義一個Field很簡單: spa

  1. <field name="price" type="sfloat" indexed="true" stored="true"/>  

基本上屬性也和FieldType相似,他的屬性會覆蓋掉FieldType的同名屬性。


CopyField(本段內容直接從solr中文網copy而來): xml

你可能想讓document的一些字段能夠屢次使用。solr 有一個字段複製機制,能夠提交多個不一樣類型字段集中到一個字段。字段複製主要涉及兩個概念,source和destination,一個是要複製的字段,另外一個是要複製到哪一個字段,如下是個例子:
1
<copyFieldsource="cat"dest="text"maxChars="30000"/>

上例中,若是text字段有數據的話,cat字段的內容將被添加到text字段中。maxChars 參數,一個int類型參數,用於限制複製的字符數。 索引

source和destination都支持通配符。如下是一個將全部以 _t 結尾的字段所有複製到text字段中。
1
<copyFieldsource="*_t"dest="text"maxChars="25000"/>

    其實說的簡單一點,好比如今你要查詢包涵"Java"的博客, 那麼你確定要查內容,標題是否包含Java,可是solr不能像SQL那樣,where tittle like '%Java%'  or  content like '%Java%'.   這個時候copyField就派上用場了, 定義一個新字段,將title和content 複製到這個新字段,索引的時候,直接從這個新字段查詢,這樣就達到目地了。  這即是copyField的典型應用場景  。注意:若是dest由多個source構成,就須要將其指定爲multiValued。
在網上找了一個例子:
  1. <schema name="eshequn.post.db_post.0" version="1.1"    
  2.     xmlns:xi="http://www.w3.org/2001/XInclude">    
  3.      <fields>    
  4.         <!-- for title -->    
  5.         <field name="t" type="text" indexed="true" stored="false" />    
  6.         <!-- for abstract -->    
  7.         <field name="a" type="text" indexed="true" stored="false" />    
  8.         <!-- for title and abstract -->    
  9.         <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>    
  10.     </fields>    
  11.     <copyField source="t" dest="ta" />    
  12.     <copyField source="a" dest="ta" />    
  13. </schema>    

DynamicField:
   
動態字段(Dynamic fields)容許 solr 索引沒有在 schema 中明肯定義的字段。這個在忘記定義一些字段時頗有用。動態字段可讓系統更靈活,通用性更強。
動態字段和常規字段相似,除了它名字中包含一個通配符外,在索引文檔時,一個字段若是在常規字段中沒有匹配時,將到動態字段中匹配。
假設schema中定義了一個叫*_i的動態動態字段,若是要索引一個叫 cost_i 的字段,可是 schema 中不存在 cost_i 的字段,這樣 cost_i  將被索引到 *_i 字段中。
動態字段也是定義在 schema.xml 文件中,和其餘字段同樣,它也有個名詞,字段類型,和屬性。
1
<dynamicFieldname="*_i"type="sint"indexed="true"stored="true"/>

建議在 schema.xml 定義一些基本的動態字段,以備擴展之用。 ci

相關文章
相關標籤/搜索