3

我们使用 Solr 3.6 来索引文档集合 (DBLP)。一些文件的元数据是德文的。为了处理元音变音和重音,我们使用 ASCIIFoldingFilterFactory(参见 schema.xml)。

搜索title:Unterstutzung多个结果时返回,但搜索时title:Unterstützung没有结果,即使有文档在其标题字段中有Unterstützung 。

在管理 Web 界面中使用分析器显示查询词和文档词已按预期编入索引和处理。但是,当查询中有变音符号时,为什么我们没有得到任何结果?

schema.xml 中标题字段的定义:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
                    <analyzer type="index">
                            <charFilter class="solr.HTMLStripCharFilterFactory"/>
                            <tokenizer class="solr.StandardTokenizerFactory"/>
                            <filter class="solr.ASCIIFoldingFilterFactory"/>
                            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" preserveOriginal="1"/>
                            <filter class="solr.LowerCaseFilterFactory"/>
                            <filter class="solr.EnglishPorterFilterFactory"/>
                            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
                    </analyzer>
                    <analyzer type="query">
                            <tokenizer class="solr.StandardTokenizerFactory"/>
                            <filter class="solr.ASCIIFoldingFilterFactory"/>
                            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1"/>
                            <filter class="solr.LowerCaseFilterFactory"/>
                            <filter class="solr.EnglishPorterFilterFactory"/>
                            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
                    </analyzer>
            </fieldType>

完整的 schema.xml: http: //pastebin.com/rQDw30nA

文档和查询中 Unterstützung 的分析器输出: http : //pastebin.com/6cxSnGwP(在查询中,处理过的术语unterstutzung突出显示)

4

2 回答 2

3

这是 Tomcat 的一个简单编码问题。必须将以下属性添加到 server.xml:

<Server ...>
 <Service ...>
   <Connector ... URIEncoding="UTF-8"/>
     ...
   </Connector>
 </Service>
</Server>

http://wiki.apache.org/solr/SolrTomcat#URI_Charset_Config

于 2012-11-21T12:01:54.780 回答
1

一年前我在 Solr 1.4 上遇到过类似的问题,我不太确定它是否也适合你,但是使用映射过滤器可以帮助你解决这个问题,除了 ascii 折叠之外,我的架构中还有相关部分

 <analyzer type="index">
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
     <tokenizer class="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.WhitespaceTokenizerFactory"/>
     <filter class="solr.ASCIIFoldingFilterFactory"/>
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
         <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
 </analyzer>

映射文件只是一个具有映射的文本文件,'unicode' => 'Mapped char'您可以根据谷歌上的语言找到大量示例...

我希望它有帮助

于 2012-11-21T04:01:16.190 回答