2013-07-31 34 views
4

在solr schema.xml中定義了許多字段類型。 例如在solr中添加自定義字段類型

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> 

是一個整數字段的定義。

我們如何在solr中定義自定義字段類型?

是否可以在solr中添加諸如BigInteger,BigDecimal,Map和其他類型的字段類型之類的Java類型?

回答

5

您可以通過在<fields>元素將它們添加到schema.xml定義Solr的新的自定義字段:

<fields> 
... 
<field name="newfieldname" type="text_general" indexed="true" stored="true" multiValued="true"/> 
... 
</fields> 

要對所支持的類型(用來定義Solr中的<fieldType>,然後是一個概述用於定義field元素),看看這個鏈接:https://cwiki.apache.org/confluence/display/solr/Field+Types+Included+with+Solr。例如,type「text_general」 schema.xml中被定義爲:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

你可以看到它使用了class="solr.TextField"作爲其基本的字段類型。 Solr模式已經有幾個types默認定義...但你可以定義更多,不知道你是否可以定義你要求的。

+0

但是我們可以將java類型添加到solr模式嗎? – MinusInfinity

+1

我不是100%確定,但我不這麼認爲。我想你需要將它們映射到Solr數據類型,例如:「bigint」到「TrieLongField」,當你將它們存儲在Solr中時...看看這個信息我發現,映射Java(在這種情況下,它是SQL)數據類型添加到Solr:https://code.google.com/p/solr-jdbc/source/browse/trunk/solr-jdbc/src/main/java/com/google/code/solr_jdbc/value/DataType .java?r = 94可能你應該在這些行中開發你的數據類型。 – emgsilva

3

您可以通過擴展FieldType類來定義新的fieldType,您可以在其中爲字段定義自己的分析器並添加其他屬性。例如,TextField是FieldType的子類。

相關問題