我有一个复合id,它是一个字符串,由一个实体的租户和id组成,用“!”分隔。 (例如说“tenant!id”)。
我发送此复合Id作为查询方法findOne(ID compositeId)的输入,但在执行时,QueryParserBase类中的BasePredicateProcessor正在转换“!”到“\!”,它打破了发送给Solr的路由密钥。因此,Solr无法使用crudrepository.findOne()方法检索实体。
有没有办法避免转换“!”到“\!”,还是有另一种方法来实现同样的目标?
答案 0 :(得分:0)
这不是总答案,而是关于可能方法的建议。
我不知道具体细节,但您可以更改用于解析传入查询的内容(可能是solrconfig.xml)。我不知道哪些可用的"处理器"会做你想做的事情 - 或者如果一个人甚至可以用这种特定的行为,因为我认为你仍然会想要其他的好处"由BasePredicateProcessor提供。看下一个可能性......
另一种方法是扩展BasePredicateProcessor并使用你的扩展类(再次,可能是solrconfig.xml)你的修改后的代码将离开"!"单独。第二个选项需要编码。
第三个选项是查看是否存在"转义序列"您可以使用它来修改查询字符串,然后再将其发送到Solr ...类似于"逃脱转义"。我不知道这是否可能。但值得研究。
#3
的一些可能有用的链接http://lucene.472066.n3.nabble.com/How-do-you-query-for-a-string-containing-a-colon-td481672.html
https://lucene.apache.org/core/2_9_4/queryparsersyntax.html
从第二个链接:
Lucene支持转义属于查询语法的特殊字符。当前列表的特殊字符是
要逃避这些角色,请在角色前使用\。例如,要搜索(1 + 1):2,请使用查询:
\(1 \ 1 \):2