在由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参数中转义“ []”。
任何帮助表示赞赏
答案 0 :(得分:1)
foo:/.../
是一个正则表达式模式匹配。可以在需要 query 的地方使用,例如主查询和过滤器查询(我不确定它是否可以在其他参数中使用,因为它可以在令牌级别iirc上使用。)>
facet前缀不是查询-它直接应用于匹配生成的令牌的开头。
与日期范围相关的转义-如果您希望它位于查询的 literal 部分中,则必须对其进行转义。在日期范围内,它用作语法。