在SOLR中使用UNION和MINUS

时间:2017-06-14 08:30:30

标签: solr lucene

我在solr工作,我想在SOLR中使用UNION和MINUS的组合。我已经制定了oracle查询。

select * from TESTTABLE where (FT = 'PE' and emis between 10 and 20) or (FT = 'DI' and emis between 10 and 15) 
union (
select * from TESTTABLE where (FT <> 'PE' or emis not between 10 and 20) and (FT <> 'DI' or emis not between 10 and 15) 
minus
select * from TESTTABLE where (FT = 'PE' and emis not between 10 and 20) or (FT = 'DI' and emis not between 10 and 15) 
);

我想制定一个等效的SOLR。请帮助我将oracle查询转换为SOLR。

2 个答案:

答案 0 :(得分:1)

你应该能够在Solr中构建它,只需要考虑到:

  1. 你可以使用像sql
  2. 这样的parens
  3. UNION:只是OR两个条件x OR y
  4. MINUS:只需加入AND NOT:x AND NOT y
  5. 即可加入两个条件
  6. 记得将所有这些放在fq中,使用作为q
  7. 注意'NOT x',在solr中有时候你会有点破解以使其正常工作,请参阅http://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html。可能取决于solr版本

答案 1 :(得分:0)

因此,对于您的示例:在年龄范围为10和25的漫画和电影制作中获取图书并假设三个字段bookName,bookType和age我将执行以下操作: -

q = bookType:漫画书类型:影视作品&amp; fq =年龄:[10 to 25]

主查询中的2个bookType子句之间没有间隙意味着OR。即带上漫画或电影。过滤查询中的年龄范围,即fq过滤掉年龄介于10和25之间的结果。