-->

通过SolrNet非英语语言支持(Non-English Language support via

2019-09-17 02:21发布

我使用SolrNet从.NET应用程序在Solr的搜索。 当我搜索过的英语单词,一切工作正常。 但是,如果我用西班牙语单词像español ,我没有得到任何搜索结果,虽然我已经索引他们。 当我调试了Solr的,我发现,查询被解析为espaA+ol

我必须做一些UTF-8编码或不SolrNet支持对ASCII字符的搜索?

Answer 1:

这不是一个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>

另外,请注意,你需要做的,以反映在指数的变化这种模式更改后重新索引数据。



Answer 2:

不知道,如果你想明确保留这些字符在索引中? 如果你不需要,倒不如使用类似

<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>

所以“西班牙语”将被收录为“猎犬”,寻找其中的任何会觉得“西班牙语”(同为A,U等)。



文章来源: Non-English Language support via SolrNet