gpt4 book ai didi

Spring Data Solr - 由 OR 分隔的多个 FilterQueries

转载 作者:行者123 更新时间:2023-12-04 14:29:16 24 4
gpt4 key购买 nike

我正在尝试使用 spring 数据 solr 实现过滤器搜索。我有以下过滤器类型,并且都有一组过滤器。

  • 一种
  • aa in (1,2,3)
  • ab (2016-08-02 至 2016-08-10)

  • ba in (2,3,4)
  • bb 之间(550 到 1000)

  • 我想使用 Spring data solr 实现的 Solr 查询是:
    q=*:*&fq=(type:A AND aa:(1,2,3) AND ab:[2016-08-02 TO 2016-08-10]) OR (type:B AND ba:(2,3,4) AND bb:[550 TO 1000])

    我不确定如何将某种类型的过滤器的多个子句分组,然后使用 OR 运算符。

    提前致谢。

    最佳答案

    诀窍是通过 setPartIsOr(true) 标记第二个标准具有 OR 性质。此方法返回void,因此不能链接。

    首先定义 aCriteria 和 bCriteria。然后 bCriteria 被标记为 OR-ish。然后两者都添加到 SimpleFilterQuery .反过来可以添加到实际 Query .这在样本中被遗漏了。
    DefaultQueryParser最后只是用来生成String可以在断言中使用它来检查查询是否按需要生成。

    import org.junit.jupiter.api.Test;
    import org.springframework.data.solr.core.DefaultQueryParser;
    import org.springframework.data.solr.core.query.Criteria;
    import org.springframework.data.solr.core.query.FilterQuery;
    import org.springframework.data.solr.core.query.SimpleFilterQuery;

    import static org.junit.jupiter.api.Assertions.assertEquals;

    public class CriteriaTest {

    @Test
    public void generateQuery() {
    Criteria aCriteria =
    new Criteria("type").is("A")
    .connect().and("aa").in(1,2,3)
    .connect().and("ab").between("2016-08-02", "2016-08-10");
    Criteria bCriteria =
    new Criteria("type").is("B")
    .connect().and("ba").in(2,3,4)
    .connect().and("bb").between("550", "1000");

    bCriteria.setPartIsOr(true); // that is the magic

    FilterQuery filterQuery = new SimpleFilterQuery();
    filterQuery.addCriteria(aCriteria);
    filterQuery.addCriteria(bCriteria);

    // verify the generated query string
    DefaultQueryParser dqp = new DefaultQueryParser(null);
    String actualQuery = dqp.getQueryString(filterQuery, null);
    String expectedQuery =
    "(type:A AND aa:(1 2 3) AND ab:[2016\\-08\\-02 TO 2016\\-08\\-10]) OR "
    + "((type:B AND ba:(2 3 4) AND bb:[550 TO 1000]))";
    System.out.println(actualQuery);
    assertEquals(expectedQuery, actualQuery);
    }
    }

    关于Spring Data Solr - 由 OR 分隔的多个 FilterQueries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38843422/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com