Solr特殊字符未编入索引

问题描述 投票:2回答:1

我已经阅读了很多关于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 - 我尝试了一些推荐的更改,但到目前为止还没有运气。有谁有这个问题,并找到了一种方法使其工作?

solr escaping special-characters
1个回答
2
投票

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

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

一个例子 :-

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

© www.soinside.com 2019 - 2024. All rights reserved.