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 而不是每个单独的机器(!)。这样做解决了我的问题。
总之,谢谢大家!
我有一个未启用词干提取的实时 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 而不是每个单独的机器(!)。这样做解决了我的问题。
总之,谢谢大家!