4

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

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

我知道+/-必须转义,因为它们是 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>
4

1 回答 1

3

SolrStandardTokenizer删除了所有“特殊字符”,因为它已针对纯文本进行了优化。因此,例如 '=' 将不会被发现,因为它在索引期间被从文本中删除。

保留所有字符的标记器之一是WhitespaceTokenizer,它仅在空格上拆分输入。您需要评估它是否能很好地解决您的问题,因为它会产生如下标记:

20 岁的狐狸跳过懒狗。-> '20 岁'、'狐狸'、'jumps'、'over'、'the'、'lazy'、'dog.'

您可能需要提供自己的分词器(通过实现一个分词器不是必需的,您可以为拆分字符定义适当的正则表达式并使用PatternTokenizer)或使用过滤器,如WordDelimiterFilteror PatternReplaceFilter

于 2012-07-12T08:29:18.287 回答