从EDismax查询中提取MUST-match和MUST_NOT匹配布尔子句

时间:2013-11-19 08:42:37

标签: java solr lucene

我有Query ExtendedDismaxQParser方法返回的parse() q。我需要从Query q生成一个新的BooleanQuery qNewBooleanQuery qNew应包含:

  • 原始Query q中每个MUST-match子句的MUST-match布尔子句。
  • 原始Query q中每个MUST_NOT-match子句的MUST_NOT-match布尔子句。
  • 单个SHOULD-match布尔子句,由原始Query q的其余部分组成。
  • 我可能需要添加的其他一些SHOULD-match子句。

例如,如果Query qa +b c +d -e -f g且其他特定条款为xyz,则新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动态类型可以是BooleanQueryBoostedQuery。是否有一种通用方法可以执行从ExtendedDismax Query q方法返回的parse()到新BooleanQuery qNew的转换?

澄清:原始Query q不一定包含任何MUST-match,MUST_NOT-match或SHOULD-match子句。事实上,原始Query q可以是Query的{​​{1}}方法可以返回的任何ExtendedDismaxQParserparse()a b c等查询分别转换为a b -c(a b c) x y z。因此,将原始查询包装在布尔查询的MUST-match子句中并添加(a b) -c x y zxy子句(如注释中所示)将无法解决问题在这种情况下。

0 个答案:

没有答案