Solr - solr.TextField上的精确匹配

时间:2014-01-03 11:51:07

标签: search solr lucene

是否有可行的方法在词干全文字段上进行完全匹配搜索? 我有一个场景,我需要一个字段进行索引和搜索,无论使用何种情况或空格。 即使在索引和查询上都使用KeywordTokenizerFactory,基于完全匹​​配的所有搜索都停止工作。 有没有办法像字符串字段一样搜索完全匹配,同时使用适用于该字段的海关标记符? 我在下面发布了我正在使用的架构:

<field name="subtipoimovel" type="buscalimpaquery" indexed="true" stored="true" />

<fieldType name="buscalimpaquery" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern=" " replacement="-"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
      </analyzer>

的问候, 西尔维奥朱利安尼

3 个答案:

答案 0 :(得分:1)

问题在于索引时使用的是KeywordTokenizerFactory,ASCIIFoldingFilterFactory,LowerCaseFilterFactory和PatternReplaceFilterFactory,但在查询时您使用的是KeywordTokenizerFactory。这对于完全匹配不会有效。 您需要将这些视为流水线处理器。您还需要在查询时间内进行“类似”处理。

答案 1 :(得分:0)

正如Srikanth在评论中指出的那样,你应该考虑在两个不同的领域中分割不同类型的术语分析。另请参阅我对功能相似问题的回答:Solr: combining EdgeNGramFilterFactory and NGramFilterFactory

答案 2 :(得分:0)

显然问题是这个标记器:

“solr.KeywordTokenizerFactory”

我将其更改为StandardTokenizerFactory,现在它可以完全匹配。

我在solr wiki上阅读了KeywordTokenizerFactory的描述,在我看来,为了完全匹配,我应该使用它而不是StandardTokenizerFactory。

有谁知道为什么会这样?