2013-03-08 96 views
2

我读过很多关于solr中的特殊字符并用“\”转义它们,但除非我使用字符串字段类型,否则我没有得到这个工作。Solr特殊字符未索引

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

q=field:a\\[b parsedquery:field:a field:b(似乎返回任何包含一个或AB) q=field:"a\\[b" parsedquery:PhraseQuery(field:"a b")(似乎返回任何包含“ab”)

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

+0

我检查,从http://wiki.apache.org/solr/SolrQuerySyntax为我工作的例子,但转义“[”你的描述结束行为。 – jpee 2013-03-08 20:42:45

回答

1

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

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

一个例子: -

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

+0

虽然我使用KeywordTokenizerFactory,但它确实解决了这个问题,因为我不想在空白处打断它。不幸的是,看起来令牌长度是我真正的问题,因为索引这种方式让我回到[此问题](http://stackoverflow.com/questions/15255742/solr-string-field-type-max-indexable-字符)。然而,这是正确的答案,因为'q = field:a \\ [b'确实返回'a [b'作为解析的查询。 – BLogan 2013-03-11 15:05:29