首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >太阳黑子/Solr:非字母字符

太阳黑子/Solr:非字母字符
EN

Stack Overflow用户
提问于 2012-07-12 01:47:53
回答 1查看 723关注 0票数 4

我正在使用Solr和Sunspot/dismax。是否可以查询非字母字符?即:

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

我知道必须对+/-进行转义,因为它们是dismax包含/排除操作符。但是当我搜索这些字符时,没有找到匹配的字符:

代码语言:javascript
运行
复制
Foo.search { fulltext '=' }.results.length   # => 0
Foo.search { fulltext '\=' }.results.length  # => 0

然而:

代码语言:javascript
运行
复制
Foo.search { fulltext 'a'}.results.length    # => 30

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

代码语言:javascript
运行
复制
    <fieldType name="text" class="solr.TextField" omitNorms="false">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-12 16:29:18

Solr的StandardTokenizer去掉了所有的“特殊字符”,因为它被优化为与纯文本一起使用。因此,例如,'=‘将不会被找到,因为它在索引过程中被从文本中剥离。

保留所有字符的标记器之一是WhitespaceTokenizer,它只在空格上拆分输入。你需要评估它是否是你的问题的好解决方案,因为它会产生这样的令牌:

20岁的狐狸

跳过了这只懒狗。->‘20岁’,‘狐狸’,‘跳跃’,‘越过’,‘那个’,‘懒惰’,‘狗’。

您可能需要提供自己的记号赋予器(不需要通过实现记号赋值程序,您可以为拆分的字符定义适当的正则表达式并使用PatternTokenizer),或者使用WordDelimiterFilterPatternReplaceFilter之类的过滤器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11438453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档