代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

如何在querybuilders.matchquery()中添加筛选器,以获取基于筛选器的匹配文档

  •  0
  • Karthikeyan  · 技术社区  · 7 年前

    ABC-123 我要取所有匹配的代码 Type Reg

    SearchRequest searchRequest = new SearchRequest(INDEX); 
    searchRequest.types(TYPE);
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
    QueryBuilder qb=QueryBuilders.matchQuery("code", code);
    searchSourceBuilder.query(qb);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse1 = null;
    try {
         searchResponse1 = restHighLevelClient.search(searchRequest);
    } catch (IOException e) {
        e.getLocalizedMessage();
    }
    SearchHit[] searchHits1 = searchResponse1.getHits().getHits();
    Replacement linkId = null;
    Replacement replacement = null;
    List<Replacement> linkIDList=new ArrayList<Replacement>();
    for (SearchHit hit1 : searchHits1) {
        linkId = new Replacement();
         Map<String, Object> sourceAsMap1 = hit1.getSourceAsMap();
         linkId.setLink_id(sourceAsMap1.get("code"));
         linkIDList.add(linkId);
    }
    

    id      link_id         code            Type
    1001    2001            ABC-123         Reg
    1002    2002            ABC-345         Reg
    1003    2003            ABC-123         Act
    1004    2004            ABC-123         Reg
    

    id      link_id         code            Type
    1001    2001            ABC-123         Reg
    1004    2004            ABC-123         Reg
    

    它,不应考虑下面的记录。因为它的类型是 Act

    id      link_id         code            Type
    1003    2003            ABC-123         Act
    

    有人知道吗?我怎么补充 filter

    1 回复  |  直到 7 年前
        1
  •  1
  •   Val    7 年前

    bool/must/filter

    QueryBuilder qb = QueryBuilders.boolQuery()
        .must(QueryBuilders.matchQuery("code", code))
        .filter(QueryBuilders.termQuery("Type", "Reg"));
    searchSourceBuilder.query(qb);