我已经阅读了很多关于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 - 我尝试了一些推荐的更改,但到目前为止还没有运气。有没有人遇到过这个问题并找到了一种让它起作用的方法?
答案 0 :(得分:2)
Solr默认使用StandardTokenizerFactory来创建令牌。在创建令牌时,此令牌化程序会删除无关的字符(可能在任何特殊字符上进行标记)。 Solr实际上可能正在对'['进行标记,因此您没有得到所需的结果。它也可以解释为什么只有在使用字符串类型时才获得所需的结果(因为未分析字符串类型)。尝试使用WhiteSpaceTokenizerFactory而不是StandardTokenizerFactory。 WhiteSpaceTokenizerFactory将在任何空格上进行标记,因此,您可以查询特殊的字符(在转义它们之后)。
请记住在索引分析器中指定上述标记生成器以及查询和选择分析器(简称所有分析器)。
一个例子: -
http://www.pathbreak.com/blog/solr-text-field-types-analyzers-tokenizers-filters-explained