路径分隔符实际上是否需要在过滤器查询中转义而不是在 solrj 的构面前缀中?

Does the path separator actually needs to be escaped in filter query but not in the facet prefix in solrj?

在我的 java 由 solrj 提供支持的应用程序中,我需要在文档路径上添加 drill down 函数,这些路径在索引时由 PathHierarchyTokenizer 标记化。

在研究为什么没有出现预期结果时,我注意到我要搜索的路径需要在 fq 参数中正确 java 转义,即“/”->“/” (java 中的“\/”)。所以 query.toQueryString() 打印出 fq=path_descendent_path%3A%5C%2Fhome%5C%2Fuser1%5C%2FTestDir.

所以我有点困惑,因为当转义“/”时,facet 前缀不起作用(facet count returns null),而在路径中没有转义“/”时,返回正确的计数。

有效的完整查询是 select?q=test&q.op=AND&start=0&rows=10&defType=edismax&qf=contents_txt&facet=true&facet.mincount=1&facet.field=path_descendent_path&facet.limit=-1&fq=path_descendent_path%3A%5C%2Fhome%5C%2Fuser1%5C%2FTestDir&f.path_descendent_path.facet.prefix=%2Fhome%2Fuser1%2FTestDir

因此我想知道这是否通常使用 fq 参数的转义路径和 facet 前缀中的非转义路径,或者我是否遗漏了什么?

请注意:根据 lucene doc "/" is a special character in Lucene as "+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /" also are. But I have never needed to escape "[ ]" for example in fq parameter dealing with date range.

非常感谢任何帮助

foo:/.../ 是正则表达式模式匹配。这适用于需要 query 的地方,例如主查询和过滤器查询(我不确定它是否适用于其他参数,因为它适用于令牌级别 iirc。 )

facet 前缀不是查询 - 它直接应用于匹配生成的标记的前面。

关于日期范围的转义 - 如果您希望它位于查询的 literal 部分内,则必须对其进行转义。在日期范围内,它用作 syntax.