【发布时间】:2015-06-13 07:12:30
【问题描述】:
我有一个未启用词干提取的实时 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
谢谢
【问题讨论】:
-
您能否发布您正在使用的 Solr 版本、您正在执行的查询以及您获得的 debugQuery 输出?
-
您是否在 Solr Admin UI Analyzer 中验证了词干提取?