当查询包含在包含由空格分隔的单词的引号中时,部分搜索的Solr不起作用

时间:2012-02-10 23:13:30

标签: ruby-on-rails search solr lucene sunspot

这是我的搜索查询:

name_text_partial_all:“你好世界”

该字段在一个文档的索引中包含以下单词:hello world

以下是此类型的架构定义:

<fieldtype class="solr.TextField" name="text_partial_all" positionIncrementGap="100" omitNorms="false" stored="false">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^\d\sa-zA-Z]" replacement=""/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^\d\sa-zA-Z]" replacement=""/>
    <filter class="solr.LengthFilterFactory" min="2" max="30" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
  </analyzer>
</fieldtype>

这是找不到文件。有什么线索的原因?

1 个答案:

答案 0 :(得分:1)

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="30"/>将生成ngram令牌,这些令牌位于不同的位置 对于例如Hello World当它通过NGramFilterFactory时,令牌Hello和World将处于不同的位置 您可以检查Hello World的分析,令牌Hello位于第10位,世界位于第20位 因此,当name_text_partial_all:"hello world"起作用时,查找完整短语name_text_partial_all:"hello world"~9的查询将无效 您需要使用slop或位置过滤器来保持相同的位置。

相关问题