我有Query ExtendedDismaxQParser方法返回的parse() q
。我需要从Query q
生成一个新的BooleanQuery qNew
。 BooleanQuery qNew
应包含:
Query q
中每个MUST-match子句的MUST-match布尔子句。 Query q
中每个MUST_NOT-match子句的MUST_NOT-match布尔子句。Query q
的其余部分组成。例如,如果Query q
为a +b c +d -e -f g
且其他特定条款为x
,y
和z
,则新BooleanQuery qNew
应该是(a c g) +b +d -e -f x y z
。
为了生成BooleanQuery qNew
,我需要从原始Query q
中提取所有MUST-match和MUST_NOT-match布尔子句,如果q
是{a}},那么这很容易BooleanQuery
。我查看了ExtendedDismax parse() method code,返回的Query q
动态类型可以是BooleanQuery或BoostedQuery。是否有一种通用方法可以执行从ExtendedDismax Query q
方法返回的parse()
到新BooleanQuery qNew
的转换?
澄清:原始Query q
不一定包含任何MUST-match,MUST_NOT-match或SHOULD-match子句。事实上,原始Query q
可以是Query
的{{1}}方法可以返回的任何ExtendedDismaxQParser
。 parse()
和a b c
等查询分别转换为a b -c
和(a b c) x y z
。因此,将原始查询包装在布尔查询的MUST-match子句中并添加(a b) -c x y z
,x
和y
子句(如注释中所示)将无法解决问题在这种情况下。