太阳黑子/ Solr:非字母字符

时间:2012-07-11 17:47:53

标签: ruby solr lucene sunspot dismax

我正在使用Solr和Sunspot / dismax。是否可以查询非字母字符?即:

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

我知道必须转义+/-,因为它们是dismax包含/排除运算符。但是当我搜索任何这些角色时,我没有得到任何匹配:

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

然而:

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

这是我正在使用的tokenizer配置:

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

1 个答案:

答案 0 :(得分:3)

Solr的StandardTokenizer删除了所有'特殊字符',因为它已经过优化,可以与纯文本一起使用。因此,例如'='将无法找到,因为它在索引期间被从文本中删除。

保留所有字符的标记器之一是WhitespaceTokenizer,它仅在空格上分割输入。您需要评估它是否是一个很好的解决方案,因为它会产生这样的令牌:

  20岁的狐狸跳过懒狗。 - &GT; '20岁','狐狸','跳','过','','懒惰','狗'。

您可能需要提供自己的标记生成器(通过实现标记化器不是必需的,您可以为拆分字符定义适当的正则表达式并使用PatternTokenizer)或使用WordDelimiterFilter或{ {3}}