我使用SolrNet从.NET应用程序在Solr的搜索。 当我搜索过的英语单词,一切工作正常。 但是,如果我用西班牙语单词像español
,我没有得到任何搜索结果,虽然我已经索引他们。 当我调试了Solr的,我发现,查询被解析为espaA+ol
。
我必须做一些UTF-8编码或不SolrNet支持对ASCII字符的搜索?
我使用SolrNet从.NET应用程序在Solr的搜索。 当我搜索过的英语单词,一切工作正常。 但是,如果我用西班牙语单词像español
,我没有得到任何搜索结果,虽然我已经索引他们。 当我调试了Solr的,我发现,查询被解析为espaA+ol
。
我必须做一些UTF-8编码或不SolrNet支持对ASCII字符的搜索?
这不是一个SolrNet的问题,它关系到Solr如何处理是不是在第一个127 ASCII字符集字符。 建议您最好是添加ASCIIFoldingFilterFactory到您的存储西班牙语单词你Solr的领域。
作为一个例子,如果你使用text_general
字段类型如Solr的例子是设置为在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>
另外,请注意,你需要做的,以反映在指数的变化这种模式更改后重新索引数据。
不知道,如果你想明确保留这些字符在索引中? 如果你不需要,倒不如使用类似
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
所以“西班牙语”将被收录为“猎犬”,寻找其中的任何会觉得“西班牙语”(同为A,U等)。