Ruby 太阳黑子/太阳光:非字母字符

Ruby 太阳黑子/太阳光:非字母字符,ruby,solr,lucene,sunspot,dismax,Ruby,Solr,Lucene,Sunspot,Dismax,我正在使用太阳黑子/消光的Solr。是否可以查询非字母字符?即: ~!@$%^&*()\uU9+-=[]{}\ 我知道+/-必须转义,因为它们是demax包含/排除运算符。但当我搜索这些字符时,没有找到匹配项: Foo.search { fulltext '=' }.results.length # => 0 Foo.search { fulltext '\=' }.results.length # => 0 然而: 以下是我正在使用的标记器配置: <field

我正在使用太阳黑子/消光的Solr。是否可以查询非字母字符?即:

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

我知道
+/-
必须转义,因为它们是demax包含/排除运算符。但当我搜索这些字符时,没有找到匹配项:

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

以下是我正在使用的标记器配置:

    <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
删除了所有的“特殊字符”,因为它已优化为与纯文本一起使用。因此,例如“=”将找不到,因为它在索引过程中被从文本中剥离

保留所有字符的标记器之一是,它只在空白处分割输入。您需要评估它是否是解决您的问题的好方法,因为它将生成如下标记:

20岁的狐狸跳过了那只懒狗20岁的“狐狸”,“跳跃”,“越过”,“懒惰”,“狗”


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

您使用什么标记器?你确定它没有删除标点符号吗?用“文本”中使用的标记器更新了我的问题。
    <fieldType name="text" class="solr.TextField" omitNorms="false">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>