我有一个查询-license:"CC-BY-NC" AND -license:"CC-BY-ND 4.0 (Int)"
要传递到PrecedenceQueryParser中。解析如下:
Query query = new PrecedenceQueryParser().parse(filter, '')
但是在生成的查询中可以看到,子句都像-lincense:CC-BY-NC
一样,“”都丢失了。
是否有保留“"的设置?
更新更新更新
我理解这一点,因为我正在查找CC-BY-ND 4.0(Int)的匹配项,不带双引号(双引号只是用来使它成为一个短语)。这就是为什么query. clause [1].query在CC-BY-ND 4.0(Int)前后没有“”的原因。
现在我这样做:
def bqb = new BooleanQuery.Builder()
clauses.each { clause ->
bqb.add(clause.query, clause.prohibited ? BooleanClause.Occur.SHOULD : BooleanClause.Occur.MUST_NOT)
}
String s = bqb.build().toString()
构建一个BooleanQuery并将子句放在一起,
于是S等于license:CC-BY-ND 4.0 (Int) license:CC-BY-NC
这肯定不是我想要的,我需要CC-BY-ND 4.0(Int)被双引号包围。有什么办法可以做到这一点吗?
吉布斯的可能是一个解决方案,但有点棘手,我认为。
2条答案
按热度按时间zi8p0yeb1#
一些额外的信息,添加到由@gibbs提供的答案中:
当使用经典查询解析器语法(问题中使用的语法)时,以下字符都具有特殊含义,因此可能需要在出现它们的任何搜索项中进行转义:
请注意,在两种情况下,这些是字符组:
&&
和||
中的一个或多个。此列表记录在此处。
处理所有这些字符的最简单方法是在构建搜索表达式之前,将每个搜索项传递给classic
QueryParser
:例如:
guicsvcw2#
你需要逃离他们。
当您传递
-license:"CC-BY-NC" AND -license:"CC-BY-ND 4.0 (Int)"
this时,请使用下面的