当请求lå时,Apache solr搜索返回日志结果;g、 lö;g等(utf-8字符)

当请求lå时,Apache solr搜索返回日志结果;g、 lö;g等(utf-8字符),apache,solr,Apache,Solr,我有一个站点,其中Drupal、ApacheSolr和tomcat是ApacheSolr的主机。我编辑了tomcat schema.xml以支持utf-8。这使得搜索utf-8字符成为可能 但是,实际结果集的工作出乎意料。搜索包含utf-8字符的内容时,ApacheSolr也会返回包含“等效”字符的内容 范例 搜索lag(law)将返回带有låg(low)的内容。瑞典语里有很多不同的东西。这是否可以配置。在这种情况下,where?看起来您的模式中有ASCIIFoldingFilterFactor

我有一个站点,其中Drupal、ApacheSolr和tomcat是ApacheSolr的主机。我编辑了tomcat schema.xml以支持utf-8。这使得搜索utf-8字符成为可能

但是,实际结果集的工作出乎意料。搜索包含utf-8字符的内容时,ApacheSolr也会返回包含“等效”字符的内容

范例
搜索lag(law)将返回带有låg(low)的内容。瑞典语里有很多不同的东西。这是否可以配置。在这种情况下,where?

看起来您的模式中有ASCIIFoldingFilterFactory设置


这可由solr配置。当Solr为记录编制索引时(请参见type=“index”),它将使用您在模式中定义的分析器和过滤器。此外,当发出搜索时(请参见type=“query”),查询分析器和过滤器将再次分析搜索。这是模式中定义的内容。我建议使用Solr direct web界面,分析您的查询以及索引过程

例如:

 <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="synonyms.txt"/>
    <filter class="solr.StopFilterFactory" enablePositionIncrements="true" ignoreCase="true" words="stopwords.txt"/>
    <filter catenateAll="0" catenateNumbers="1" catenateWords="1" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
    <filter class="solr.StopFilterFactory" enablePositionIncrements="true" ignoreCase="true" words="stopwords.txt"/>
    <filter catenateAll="0" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
用于将ISO拉丁1字符集(ISO-8859-1)中的重音字符替换为其非重音等效字符

我建议您再看一次您的模式。

好的,谢谢

取消注释

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

在type=“index”och type=“query”中取消对上面一行的注释就成功了

注意


为此干杯,我会调查的。是的,可能是这样,我会调查的。非常感谢。
 <analyzer type="query">
    <!--
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    -->
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory"
            protected="protwords.txt"
            generateWordParts="1"
            generateNumberParts="1"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="0"
            splitOnCaseChange="1"
            preserveOriginal="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>