我正在使用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>发布于 2012-07-12 16:29:18
Solr的StandardTokenizer去掉了所有的“特殊字符”,因为它被优化为与纯文本一起使用。因此,例如,'=‘将不会被找到,因为它在索引过程中被从文本中剥离。
保留所有字符的标记器之一是WhitespaceTokenizer,它只在空格上拆分输入。你需要评估它是否是你的问题的好解决方案,因为它会产生这样的令牌:
20岁的狐狸
跳过了这只懒狗。->‘20岁’,‘狐狸’,‘跳跃’,‘越过’,‘那个’,‘懒惰’,‘狗’。
您可能需要提供自己的记号赋予器(不需要通过实现记号赋值程序,您可以为拆分的字符定义适当的正则表达式并使用PatternTokenizer),或者使用WordDelimiterFilter或PatternReplaceFilter之类的过滤器。
https://stackoverflow.com/questions/11438453
复制相似问题