Solr的。在schema.xml中修改字段类型之一

时间:2014-03-04 11:41:12

标签: search solr4 solr-schema

假设我有几个字段的Solr文档。现在,由于某些特定原因,我必须修改其中一个字段的类型。我知道,在修改该字段的“类型”后,我将无法使用该字段进行查询。我可以通过其他字段查询吗?

我的字段定义是

<field name="searchtag" type="text_general" indexed="true" stored="true"/>

新定义是

<field name="searchtag" type="text_ngram" indexed="true" stored="true" multivalued="true"/>

字段类型定义

    <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" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <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>

 <fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/>
    </analyzer>
    <analyzer type="query">
                <tokenizer class="solr.StandardTokenizerFactory"/>
                <filter class="solr.StandardFilterFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

由于

1 个答案:

答案 0 :(得分:0)

我找到了答案。

我在Solr-4.2.1上的数据上尝试了一个小测试用例。正如我所说,以前“搜索标签”的类型是 text_general 。我拿了一个新的Solr实例。在那里,我将searchtag定义为text_general类型字段。我还定义了其他一些领域。然后我将一些数据索引到这些字段以及 searchtag 中。因为这是一种简单而直接的方式,所以一切都很好。我用searchtag和其他字段查询并得到了正确的结果。

然后我修改了schema.xml。我将搜索标签的类型从text_general更改为 text_ngram 。修改架构后,我重新启动了Solr实例。现在,我实际上并没有打扰为searchtag索引的数据。因为我弄乱了那个领域的架构。所以,我在其他字段上执行了相同的查询。我很高兴我得到了和以前一样的Solr文件。虽然我使用了模式,但其他字段的其他索引完好无损。这就是我想要的。

希望,如果你遇到像我这样的问题,这个测试用例会对你所在的地区有所帮助。

注意:我已经提到了关于“searchtag”的架构定义以及问题区域中的字段类型。