我正在使用SolrNet从.NET应用程序中搜索Solr。
当我搜索英语单词时,一切正常。但是,如果我
使用像 español
这样的西班牙语单词,虽然我没有搜索结果
已将它们编入索引。当我在Solr上调试时,我发现了查询
被解析为 espaA+ol
。
我是否必须进行一些UTF-8编码,或者SolrNet是否支持仅搜索ASCII字符?
答案 0 :(得分:2)
这不是SolrNet问题,它与Solr如何处理不在前127个ASCII字符集中的字符有关。最好的建议是将ASCIIFoldingFilterFactory添加到您存储西班牙语单词的Solr字段。
例如,如果您使用的是Solr示例中定义的text_general
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="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>
我建议将其修改如下,将ASCIIFoldingFilterFactory添加到索引和查询分析器。
<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"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</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"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
另外,请注意,在更改架构后,您需要重新索引数据,以便将更改反映在索引中。
答案 1 :(得分:0)
不确定是否要在索引中专门保留这些字符?如果你不需要,最好使用像
这样的东西<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
所以'español'会被索引为'espanol'并且搜索其中任何一个都会找到'español'(同样适用于á,ü等)。