我将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
)或使用类似WordDelimiterFilter
或PatternReplaceFilter
的过滤器。