Solr:在实时集群中生成(重建索引问题)

Solr : stemming in a live cluster (reindexing issues)

我有一个未启用词干提取的实时 Solr 集群,我的 schema.xml 看起来像这样:

..
<field name="Searchable_Text" type="text_general" indexed="true" stored="true" multiValued="false"/> 
..
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
..
<copyField source="Searchable_Text" dest="text" maxChars="3000"/>
..
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>
..

这些是我在实时集群上启用词干提取所采取的步骤

将 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="lang/stopwords_en.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

并且我在 solrconfig 中禁用了 opensearcher :

<autoCommit> 
   <maxTime>${solr.autoCommit.maxTime:60000}</maxTime> 
   <openSearcher>false</openSearcher>  <!-- was set to true earlier-->
</autoCommit>

然后我重新索引了我的全部数据。我的假设是数据已提交,但由于 opensearcher 设置为 false,新索引的数据不可见。

在此之后,我更改了 schema.xml 以在查询中包含词干提取并更改 solrconfig.xml 以将 opensearcher 设置为 true :

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

<autoCommit> 
   <maxTime>${solr.autoCommit.maxTime:60000}</maxTime> 
   <openSearcher>true</openSearcher>  <!-- was set to true earlier-->
</autoCommit>

然后我重新加载了内核。但我仍然没有看到我的查询得到解决。 debugQuery 检查似乎没有在查询中显示词干。这很奇怪。我的方法有什么问题吗?

我正在使用 Solr 4.7

谢谢

好吧,我做了一些愚蠢的事情,因为它不起作用。上面的步骤肯定对我有用,除了当我重新加载核心时,我使用 LB VIP 而不是每个单独的机器(!)。这样做解决了我的问题。

总之,谢谢大家!