2012-11-20 67 views
3

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

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ützunghttp://pastebin.com/6cxSnGwP(在查询的处理的术语unterstutzung被突出显示)

+0

你怎么搜索?也许客户端的编码会改变你期望的行为? –

+0

我正在使用Solr管理Web界面和SolrJ Java API进行搜索。 – problemzebra

+0

也检查http://stackoverflow.com/questions/9290905/solr-tomcat-utf-8/9293107#9293107 – Jayendra

回答

1

我在一年前遇到了与Solr 1.4类似的问题,我并不完全知道,如果它可以为你工作了,但使用映射过滤器可以帮助你的是,除了ASCII折叠,有相关的部分从我的架构

<analyzer type="index">^M 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>^M 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>^M 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>^M 
    <filter class="solr.LowerCaseFilterFactory"/>^M 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>^M 
</analyzer>^M 
<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> 

映射文件就是一个文本文件中有mappins像'unicode' => 'Mapped char'你可以找到大量的依赖于对谷歌的语言的例子...

我希望它能帮助

+0

感谢您的想法,但这只是Tomcat的一个简单的问题。 – problemzebra