我正在使用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>
答案 0 :(得分:3)
Solr的StandardTokenizer
删除了所有'特殊字符',因为它已经过优化,可以与纯文本一起使用。因此,例如'='将无法找到,因为它在索引期间被从文本中删除。
保留所有字符的标记器之一是WhitespaceTokenizer
,它仅在空格上分割输入。您需要评估它是否是一个很好的解决方案,因为它会产生这样的令牌:
20岁的狐狸跳过懒狗。 - &GT; '20岁','狐狸','跳','过','','懒惰','狗'。
您可能需要提供自己的标记生成器(通过实现标记化器不是必需的,您可以为拆分字符定义适当的正则表达式并使用PatternTokenizer
)或使用WordDelimiterFilter
或{ {3}}