Solr特殊字符未编入索引

时间:2013-03-08 20:24:50

标签: solr escaping special-characters

我已经阅读了很多关于solr中的特殊字符并使用“\”转义它们但是除非我使用字符串字段类型,否则我没有让它对我起作用。

我有一个索引文本字段,其中包含a[b作为值。我想搜索此值并仅返回包含该文本的文档(不需要仅包含该文本,但需要按该顺序包含这三个字符)。以下是我尝试过的一些查询以及我从Solr看到的parsedQuery:

q=field:a\\[b parsedquery:field:a field:b(似乎返回包含a或b的任何内容) q=field:"a\\[b" parsedquery:PhraseQuery(field:"a b")(似乎返回包含a b的任何内容)

我正在使用开箱即用的text_general - 我尝试了一些推荐的更改,但到目前为止还没有运气。有没有人遇到过这个问题并找到了一种让它起作用的方法?

1 个答案:

答案 0 :(得分:2)

Solr默认使用StandardTokenizerFactory来创建令牌。在创建令牌时,此令牌化程序会删除无关的字符(可能在任何特殊字符上进行标记)。 Solr实际上可能正在对'['进行标记,因此您没有得到所需的结果。它也可以解释为什么只有在使用字符串类型时才获得所需的结果(因为未分析字符串类型)。尝试使用WhiteSpaceTokenizerFactory而不是StandardTokenizerFactory。 WhiteSpaceTokenizerFactory将在任何空格上进行标记,因此,您可以查询特殊的字符(在转义它们之后)。

请记住在索引分析器中指定上述标记生成器以及查询和选择分析器(简称所有分析器)。

一个例子: -

http://www.pathbreak.com/blog/solr-text-field-types-analyzers-tokenizers-filters-explained