当要求输入låg,lög等时,Apache solr搜索返回日志结果(utf-8个字符)

时间:2012-01-16 16:17:53

标签: apache solr

我有一个使用Drupal,apache solr和tomcat作为apache solr主机的站点。我编辑了tomcat schema.xml以启用utf-8支持。这样就可以搜索utf-8字符。

然而,实际的结果集意外地工作。使用utf-8字符搜索内容时,apache solr也会返回带有“等效”字符的内容。

实施例 搜索滞后(法律)将返回含有låg(低)的内容。瑞典语有很多不同的东西。这可以配置。在那种情况下,在哪里?

3 个答案:

答案 0 :(得分:1)

您的架构中似乎已经设置了ASCIIFoldingFilterFactory。

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ASCIIFoldingFilterFactory

答案 1 :(得分:1)

这可以通过solr配置。当Solr索引记录(请参阅type =“index”)时,它使用您在模式中定义的分析器和过滤器。此外,当您发出搜索(请参阅type =“query”)时,将再次通过queryAnalyzer和过滤器分析搜索。这是模式中定义的内容。我建议使用Solr直接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>

例如,我们可以添加solr.ISOLatin1AccentFilterFactory来替换ISO Latin 8字符集(ISO-8859-1)中的重音字符,这些字符集的非重音等效

我建议再次查看你的架构。

答案 2 :(得分:0)

好的,谢谢你们两个!

取消注释

<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>