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