2013-03-23 116 views
0

任何短语索引功能是否有Solr中的标记生成器/过滤器,可以索引一些短语(我猜的文件的形式)作为一个单一的令牌?此外,在分析仪链中放置这个产品的任何建议都是非常有用的。Solr中

回答

1

SynonymFilterFactory应该对你有所帮助。下面是从页的例子:

#Explicit mappings match any token sequence on the LHS of "=>" 
#and replace with all alternatives on the RHS. These types of mappings 
#ignore the expand parameter in the schema. 
#Examples: 
i-pod, i pod => ipod 
sea biscuit, sea biscit => seabiscuit 

在索引时间,左边的短语会被替换右边的一个记号。存储您的映射在名为syn.txt文件,你可以有分析链(从Solr的维基链接再次)如下:

<fieldtype name="syn" class="solr.TextField"> 
     <analyzer> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="syn.txt" 
        ignoreCase="true" expand="false"/> 
     </analyzer> 
</fieldtype> 
+0

谢谢,但同义词不完全是我正在寻找。例如,我想索引“纽约”作为一个单词,以便“新”或“约克”不会匹配。 – kee 2013-03-24 04:37:50

+0

如果您在syn.txt中保留'new york => newyork'并且不要将它拆分为在索引时间分析器链中进一步创建更多的标记,那么搜索'new'或'york'将不会比赛。然而,要匹配包含'new york'的文档,用户必须发出一个词组查询“new york”,并且您应该在查询时使用同义词过滤器。并且返回的文档将包含没有空格的'newyork'。顺便说一句,我搜索'新'在谷歌和它给了'纽约时代'前10名,所以它不是太糟糕了? :-) – arun 2013-03-24 05:48:17

+0

我试过了。我的发现是,Solr似乎仍然分别对“新”和“约克”进行索引。我试过expand = true和expand = false,没有更改?任何洞察哪里出了问题? – kee 2013-03-25 22:33:34

1

您需要使用这个TokenizerFactory

如果要检测的句子为好,那么你可以看看solr.UAX29URLEmailTokenizerFactory。

如果输入的是在一个特定的模式,你可以使用solr.PatternTokenizerFactory。

如果你想索引整个输入作为一个字段,你可以使用solr.KeywordTokenizerFactory。