Sunspot/Solr:非字母字符



我将Solr与Sunspot/dismax一起使用。是否可以查询非字母字符?即:

~ ! @ # $ % ^ & * ( ) _ + - = [ ] { } |

我知道+/-必须转义,因为它们是dismax包含/排除运算符。但当我搜索以下任何字符时,都找不到匹配项:

Foo.search { fulltext '=' }.results.length   # => 0
Foo.search { fulltext '=' }.results.length  # => 0

然而:

Foo.search { fulltext 'a'}.results.length    # => 30

这是我正在使用的令牌化器配置:

    <fieldType name="text" class="solr.TextField" omitNorms="false">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

Solr的StandardTokenizer删除了所有"特殊字符",因为它已优化为与纯文本一起使用。因此,例如"="将找不到,因为它在索引过程中被从文本中剥离。

保留所有字符的标记器之一是WhitespaceTokenizer,它只在空白处分割输入。你需要评估它是否是你问题的好解决方案,因为它会产生这样的令牌:

20岁的狐狸跳过懒狗"20岁"、"狐狸"、"跳跃"、"越过"、"the"、"懒惰"、"狗"

您可能需要提供自己的标记化器(实现标记化器不是必需的,您可以为拆分字符定义适当的正则表达式并使用PatternTokenizer)或使用类似WordDelimiterFilterPatternReplaceFilter的过滤器。

相关内容

  • 没有找到相关文章

最新更新