Search 索尔。在schema.xml中修改某个字段的类型

Search 索尔。在schema.xml中修改某个字段的类型,search,solr4,solr-schema,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

假设我有一个包含多个字段的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>
谢谢,我找到了答案

我在Solr-4.2.1上尝试了一个小测试用例。正如我所说的,以前searchtag的类型是text_general。我举了一个新的例子。在这里,我将searchtag定义为一个文本类型字段。我还定义了一些其他字段。然后我将一些数据索引到这些字段以及searchtag中。因为这是一种简单而直接的方法,所以一切都很顺利。我使用searchtag和其他字段进行了查询,得到了正确的结果

然后我修改了schema.xml。我将searchtag的类型从text_general更改为text_ngram。修改模式后,我重新启动了Solr实例。现在,我实际上并不担心为searchtag编制索引的数据。因为我弄乱了那个字段的模式。因此,我对其他字段执行了相同的查询。我很高兴我得到了和以前一样的Solr文档。虽然我使用了模式,但是其他字段的其他索引是完整的。这就是我想要的

希望,如果你像我一样陷入这类问题,这个测试用例将在你的领域帮助你


注意:我已经提到了关于searchtag的模式定义和问题区域中的字段类型。

你好,buddy86,请您更好地解释一下您在写作时的意思:我可以按其他字段查询吗?您可以在两个不同的字段中为数据编制索引,或者您可以使用一个字段编制索引,并设置一个不同类型的副本字段。其他字段表示除searchtag之外的字段出现在特定的Solr文档中。比如说,我在Solr文档中有10个不同的字段。其中之一是searchtag。所以,我说的是除了id和searchtag之外的其他8个字段。希望,现在清楚了。