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

时间:2019-11-19 14:31:06

标签: solr solrj

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

在研究为什么未达到预期结果的同时,我注意到我想搜索的路径需要在fq参数中正确地转义为Java,即“ /”->“ /”(“ \ /” Java)。因此query.toQueryString()会打印出fq=path_descendent_path%3A%5C%2Fhome%5C%2Fuser1%5C%2FTestDir

所以我有点困惑,因为当转义“ /”时,构面前缀不起作用(构面计数返回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参数的转义路径和未转义的路径,还是我错过了什么?

请注意:根据lucene doc,“ /”在Lucene中是一个特殊字符,与“ + - && || ! ( ) { } [ ] ^ " ~ * ? : \ /”一样。但是我从来不需要在处理date range的fq参数中转义“ []”。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

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

facet前缀不是查询-它直接应用于匹配生成的令牌的开头。

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