elasticsearch实现分类搜索

分类搜索是业务中经常出现的场景。以下是原生api代码。

{
  "query": {
    "multi_match": {
      "query": "这些都跟你的钱包有关",
      "type": "most_fields",
      "fields": [
        "documentTitle^1.5",
        "documentKeywrods^2",
        "documentContent"
      ]
    }
  },
  "filter": {
    "term": {
      "categoryId": "1"
    }
  }
}

在转换程javaAPI后实测后,发现会出现问题。分类过滤失效。以下是转换后的代码

BoolQueryBuilder boolQuery = boolQuery();
        boolQuery.should(matchQuery("documentTitle", "这些都跟你的钱包有关").boost(1.5f));
        boolQuery.should(matchQuery("documentKeywrods","这些都跟你的钱包有关").boost(2.0f));
        boolQuery.should(matchQuery("documentContent", "这些都跟你的钱包有关"));
        boolQuery.filter(termQuery("category", "1"));

后来发现不能直接在BoolQueryBuilder上设置过滤。正确的写法是下面的代码。

        BoolQueryBuilder boolQuery = boolQuery();
        boolQuery.should(matchQuery("documentTitle", "这些都跟你的钱包有关").boost(1.5f));
        boolQuery.should(matchQuery("documentKeywrods","这些都跟你的钱包有关").boost(2.0f));
        boolQuery.should(matchQuery("documentContent", "这些都跟你的钱包有关"));
        SearchRequestBuilder responsebuilder = client.prepareSearch("index")
                .setTypes("type")
                .setQuery(boolQuery)
                .setPostFilter(termQuery("categoryId", "1"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值