2011-09-12 87 views
0

我想用一个模式,其中一个过滤器后,被称为空格标记生成器IST之后,所有其他过滤器应适用:如何在solr中的过滤器之间使用标记器?

<filter class="solr.SynonymFilterFactory" tokenizerFactory="solr.KeywordTokenizerFactory" synonyms="german/synonyms.txt" ignoreCase="true" expand="true"/> 
<!-- Case insensitive stop word removal. 
     add enablePositionIncrements=true in both the index and query 
     analyzers to leave a 'gap' for more accurate phrase queries. 
--> 

<tokenizer class="solr.WhitespaceTokenizerFactory"/> 

<filter class="solr.WordDelimiterFilterFactory" 
     generateWordParts="1" 
     generateNumberParts="1" 
     catenateWords="1" 
     catenateNumbers="1" 
     catenateAll="0" 
     splitOnCaseChange="1" 
     preserveOriginal="1" 
/> 

Solr的只适用于过滤器之间的新秩序,但标记生成器被调用之前每个过滤器...

有没有人有线索?

最好的问候,hijolan

回答

2

运行过程中出现的标记生成器之前的过滤器是默认的。更像这样的 - 就是这样,solr的作品。但是您可以在标记器之前添加特殊类型的筛选器,例如solr.MappingCharFilterFactory

我想说的是:它取决于过滤器,如果它在分词器之前工作。看看CharFilter:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#CharFilterFactories

如果您需要在“过滤器”的条款在更复杂的方式,像solr.WhitespaceTokenizerFactory呢,尝试使用不同的标记生成器,像solr.PatternTokenizerFactorysolr.PatternTokenizerFactory

+0

我已经尝试过使用其他tokenizer类似KeywordTokenizerFactory,并在此之后应用同义词列表。除同义词过滤器之外的所有其他过滤器都会分配额外的Whitespace-Tokenizer。这有效,我的同义词是正确的。 但是,如果我在分析器中查看,我还会使用空格将分割的字符串再次分割出来。 例如:Nullam consequat,sem vitae => Nullam consequat,sem vitae | Nullam | consequat | sem |简历 –

+0

不确定,如果我理解你的话:'KeywordTokenizerFactory'应该处理你的单词/术语而不做任何改变。 “solr.WordDelimiterFilterFactory”可能会将您的单词/术语分割为更多的空白处。看看'solr.WordDelimiterFilterFactory'手动:'在字内分隔符(所有非字母数字字符)上进行拆分.' ...其中空格不是字母数字 –