Solr4.7---Field、CopyField、DynamicField

Field:web

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


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


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

      

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

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

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

source和destination都支持通配符。如下是一個將全部以 _t 結尾的字段所有複製到text字段中。索引

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


    其實說的簡單一點,好比如今你要查詢包涵"Java"的博客, 那麼你確定要查內容,標題是否包含Java,可是solr不能像SQL那樣,where tittle like '%Java%'  or  content like '%Java%'.   這個時候copyField就派上用場了, 定義一個新字段,將title和content 複製到這個新字段,索引的時候,直接從這個新字段查詢,這樣就達到目地了。  這即是copyField的典型應用場景 。注意:若是dest由多個source構成,就須要將其指定爲multiValued。ci

在網上找了一個例子:文檔

<schema name="eshequn.post.db_post.0" version="1.1"  
    xmlns:xi="http://www.w3.org/2001/XInclude">  
     <fields>  
        <!-- for title -->  
        <field name="t" type="text" indexed="true" stored="false" />  
        <!-- for abstract -->  
        <field name="a" type="text" indexed="true" stored="false" />  
        <!-- for title and abstract -->  
        <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>  
    </fields>  
    <copyField source="t" dest="ta" />  
    <copyField source="a" dest="ta" />  
</schema>

DynamicField:博客

   

動態字段(Dynamic fields)容許 solr 索引沒有在 schema 中明肯定義的字段。這個在忘記定義一些字段時頗有用。動態字段可讓系統更靈活,通用性更強。

動態字段和常規字段相似,除了它名字中包含一個通配符外,在索引文檔時,一個字段若是在常規字段中沒有匹配時,將到動態字段中匹配。

假設schema中定義了一個叫*_i的動態動態字段,若是要索引一個叫 cost_i 的字段,可是 schema 中不存在 cost_i 的字段,這樣 cost_i  將被索引到 *_i 字段中。

動態字段也是定義在 schema.xml 文件中,和其餘字段同樣,它也有個名詞,字段類型,和屬性。

1
<     dynamicField     name     =     "*_i"     type     =     "sint"     indexed     =     "true"     stored     =     "true"     />

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

相關文章
相關標籤/搜索