2015-10-18 38 views
0

我想删除不需要的词,并使用词干,最后创建带状疱疹。然而,在取消停用词之后,它给了我一个“_”代替停用词的带状疱疹。 我试图使用PatternReplaceFactory替换_但它不工作。我有如下字段类型:solr词干,停止词和带状疱疹没有给出预期的输出

<fieldType name="common_shingle" class="solr.TextField"> 
    <analyzer type="index"> 
      <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.PatternReplaceFilterFactory" pattern=".*_.*" replacement=""/> 
     <filter class="solr.ShingleFilterFactory" outputUnigrams="false" minShingleSize="3" maxShingleSize="3"/>    
    </analyzer> 
</fieldType> 

当我分析了“A棕色狐狸跳过迅速通过懒狗”。它给了我下面的结果:

  1. _棕色狐狸
  2. 棕色狐狸quickli
  3. 狐狸quickli跳
  4. quickli跳_
  5. 跳_
  6. _落子
  7. _落子狗

我该如何移除_来自小屋标记。另外,是否有一种方法只能从停用词创建带状疱疹?

+0

请参阅http://stackoverflow.com/questions/28459949/solr-stop-words-replaced-with-symbol以及 – Marco

回答

0

_由ShingleFilter插入,因为它用标记_替换空位增量。

如果你想删除这个值,你必须在之后的ShingleFilter执行PatternReplace ,因为它在这之前并不存在于令牌流中。

ElasticSearch公开一个选项来选择替换字符作为“fillter_token”,但Solr的实现似乎直接使用Lucene实现,所以你应该可以使用fillerToken来自己设置它。尝试在ShingleFilter定义中执行fillerToken="",而不是使用patternreplacefilter。因为停用词 设置PositionIncrements为False,luceneMatchVersion的

+0

它正在工作。但是,我想要在停用词被删除之后确切的3个词语带状疱疹。如下图:“ 棕色狐狸快速跳, 狐狸快速跳。 快速跳跃拉子,跳跃拉子狗”。我不想要这个空间或_瓦片 –

+0

@SanjayLama确定 - 那么你应该问这个问题:-)如果你在文本中保留了一个神奇的填充符(比如'_'),你可以将PatternReplace移动到在ShingleFilter之后并用“”(这是你的过滤器所做的)替换所有包含'_'的标记,实际上将它们从字段的值中移除。 – MatsLindh

+0

它的工作就像你说的。但是,它正在跳过包含停用词的作品。目前,它给我只有2个带状疱疹:'棕色狐狸快速'和'狐狸快速跳'。休息被删除。我希望在停用词被删除后形成带状疱疹。如下:“棕色狐狸快,狐狸快速跳跃,快速跳跃拉子,跳跃拉子狗”。如果你能指导我完成这件事,那对我真的很有帮助。谢谢。 –

1

那4.3

这个替换您StopFilterFactory。

<filter class="solr.StopFilterFactory" luceneMatchVersion="4.3" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/> 
+0

作为过滤器参数的'luceneMatchVersion'不再存在于solr 6中。您必须在solconfig.xml中设置' 4.3'。 – Marco

0

在SOLR的吉拉有一个与可用补丁的改进要求:https://issues.apache.org/jira/browse/SOLR-11604

编译新的Lucene分析器-common.jar与此补丁,并使用skipFillerTokens =“真”的选项schema.xml

<filter class="solr.ShingleFilterFactory" ... skipFillerTokens="true"/> 

如果您希望将此修补程序包含在下一个SOLR版本中,请为此Jira问题投票。