2012-02-08 100 views
5

是否可以在多個內核之間共享schema.xml中定義的Solr fieldTypeSolr字段類型如何在多個核心之間共享?

我在Solr中有許多內核,並發現自己重新定義了僅基於內置過濾器和標記化器的fieldType。例如

<fieldType name="exact" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

我知道我可以寫我自己的Field類和內核之間共享這一點,但它似乎愚蠢的創建自定義代碼的依賴時,自定義代碼將只配置標準過濾器。有沒有更好的辦法?

請注意,上述示例與其他一些示例(配置停用詞和字符轉換等)相比很簡單。

回答

1

我不知道在覈心之間共享fieldTypes的方法。但是,如果您的核心都具有相同的模式(例如相同的字段和字段類型),則可以在多個核心之間共享該模式,並且只需要在一個位置更新模式。請參閱Solr用戶郵件列表文章:Sharing Schema with multiple cores瞭解安裝細節。

+0

謝謝,不幸的是,他們不共享相同的領域。 – beerbajay 2012-02-08 13:07:30

+1

查看https://issues.apache.org/jira/browse/SOLR-3087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel如果修復了,就可以做到。所以最終可能;) – mrmuggles 2012-07-17 13:24:35

2

通過使用XInclude,可以在schema.xml中共享類似「common」定義的字段類型,跨多個核心的solrconfig.xml。

<?xml version="1.0" encoding="UTF-8" ?> 
<!-- common-types.xml --> 
<types> 
<fieldType name="exact" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
</fieldType> 
</types> 

而且用它在你的schema.xml象下面這樣:

<schema version="1.1"> 
    <types> 
    <!-- Other types here --> 
    </types> 
    <xi:include href="file:/path/to/common-types.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include> 
</schema> 

注意:包括XML文件必須是一個根節點。