2

我已经阅读了很多关于 solr 中的特殊字符并用“\”转义它们的内容,但除非我使用字符串字段类型,否则我没有得到这个为我工作。

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

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

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

4

1 回答 1

2

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

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

一个例子 :-

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

于 2013-03-11T03:04:24.073 回答