Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate搜索-将sql转换为lucene查询_Java_Sql_Lucene_Hibernate Search - Fatal编程技术网

Java Hibernate搜索-将sql转换为lucene查询

Java Hibernate搜索-将sql转换为lucene查询,java,sql,lucene,hibernate-search,Java,Sql,Lucene,Hibernate Search,我有以下选择SQL查询 SELECT * FROM data_entity WHERE agreement_number='9999' AND use_type='xxxx' AND end_date IS NOT NULL AND end_date <= '2022-05-03'::date OR (rib='1111111' AND iban='22222222'); 您在同一布尔查询中使用了必须和应该。这可能不会像你认为的那样 要模拟布尔值和,请使用只包含must子句的布尔查询

我有以下选择SQL查询

SELECT * FROM data_entity WHERE 
agreement_number='9999' AND use_type='xxxx' AND end_date IS NOT NULL AND end_date <= '2022-05-03'::date 
OR (rib='1111111' AND iban='22222222');

您在同一布尔查询中使用了
必须
应该
。这可能不会像你认为的那样

要模拟布尔值
,请使用只包含
must
子句的布尔查询。 要模拟布尔值
,请使用只包含
should
子句的布尔查询

此外,您正在使用上面的
来比较日期,而您的SQL查询显然是在查找给定日期之前的日期

因此,尝试一下:

org.apache.lucene.search.Query firstQuery = getQuery().bool()
    .should(getQuery().bool()
        .must(getQuery().keyword().onField("agreementNumber").matching(agreementNumber).createQuery())
        .must(getQuery().keyword().onField("useType").matching(useType).createQuery())
        .must(getQuery().range().onField("endDate").below(effectiveDate).createQuery()).createQuery())
    .should(getQuery().bool()
        .must(getQuery().keyword().onField("rib").matching(rib).createQuery())
        .must(getQuery().keyword().onField("iban").matching(iban).createQuery()).createQuery())
        .createQuery();
在相关说明中,您可能还希望禁用对表示代码的字段的分析,例如
协议编号
肋骨
,等等。否则,您可能会得到比预期更多的匹配项。或者,如果您需要某种程度的宽大处理,但不需要全面的分析,您可以依赖
规范化程序

(对于阅读本文的其他人来说,“肋骨”是一个法国银行账户标识符,而不是一块肉)

org.apache.lucene.search.Query firstQuery = getQuery().bool()
    .should(getQuery().bool()
        .must(getQuery().keyword().onField("agreementNumber").matching(agreementNumber).createQuery())
        .must(getQuery().keyword().onField("useType").matching(useType).createQuery())
        .must(getQuery().range().onField("endDate").below(effectiveDate).createQuery()).createQuery())
    .should(getQuery().bool()
        .must(getQuery().keyword().onField("rib").matching(rib).createQuery())
        .must(getQuery().keyword().onField("iban").matching(iban).createQuery()).createQuery())
        .createQuery();