Solr子字符串搜索产生所有索引结果

时间:2014-08-04 03:06:11

标签: solr

要进行子字符串搜索,我添加了一个新的fieldType - 带有NgramFilter的“Text”。

它运作良好,但缺点是这个问题

实施例

name = ['Apple','Samy','And','a']

当我进行搜索name:a时,上述所有项目都会被提起。即使搜索更改为“App”。以上所有项目均已提取。我该如何解决这个问题?

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="100" />
    </analyzer>
</fieldType>

enter image description here

1 个答案:

答案 0 :(得分:0)

正如您在分析中所看到的,索引值和查询值都通过EdgeNGramFilter进行解析 - 这意味着它将匹配任何其他东西的子串。添加一个更简单的过滤器来查询字段,你应该好好去。

来自Wiki的示例应该可以通过复制和粘贴它来使用:

<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="15" side="front"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
   </analyzer>
</fieldType>

我最初的猜测是,由于您没有提供两个替代定义,Solr将为两者使用相同的链。您的分析输出证实了这种怀疑。尝试添加一个带有type="query"的分析器,以便有一个特定的链来查询该字段(您不希望EdgeNGram同时存在)。

相关问题