Elasticsearch搜索一篇文章,关键词是"dog cat",以空格分隔多个关键词(类似搜索引擎),搜索结果的文章是包含"dog"和"cat"。
搜索了下现有网上的答案,没找到答案(如有更好的答案,请留言分享),只好通过分割关键词,进行匹配搜索。
数据:
直接在ES查询:
POST blog01/article/_search
{
"query": {
"bool": {
"must": [{
"term": {
"content": "dog"
}
}, {
"term": {
"content": "cat"
}
}]
}
},
"from": 0,
"size": 10
}
结果:
JAVA实现:
// 分割符
String searchSplitString = " ";
String searchText = "dog cat";
BoolQueryBuilder allBoolQueryBuilder = QueryBuilders.boolQuery();
if (StringUtils.isNotBlank(searchText)) {
if (searchText.indexOf(searchSplitString) > 0) {
String[] searchSplitArray = searchText.split(searchSplitString);
for (String searchString : searchSplitArray) {
BoolQueryBuilder contentQueryBuilder = QueryBuilders.boolQuery();
contentQueryBuilder.must(termQuery("content", searchString));
allBoolQueryBuilder.must(contentQueryBuilder);
}
}
}
// 构建分页条件
// 执行查询
// ...