elasticsearch实现分类搜索

来源:互联网 发布:p2p网络借贷融资过程 编辑:程序博客网 时间:2024/05/22 18:42

分类搜索是业务中经常出现的场景。以下是原生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"));