opt
This commit is contained in:
parent
69a3a1bb49
commit
566ed1d880
@ -57,20 +57,14 @@ public class FileElasticsearchGateway {
|
|||||||
if (CollectionUtil.isEmpty(keywords)) {
|
if (CollectionUtil.isEmpty(keywords)) {
|
||||||
return Lists.newArrayList();
|
return Lists.newArrayList();
|
||||||
}
|
}
|
||||||
|
List<List<String>> keywordGroups = keywords.stream()
|
||||||
|
.map(Collections::singletonList)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
|
QueryBuilder query = buildAllMustSearchQuery(keywordGroups);
|
||||||
for (String kw : keywords) {
|
|
||||||
boolQuery.must(QueryBuilders.multiMatchQuery(kw)
|
|
||||||
.field("filename", 10.0f)
|
|
||||||
.field("content", 1.0f)
|
|
||||||
.type(org.elasticsearch.index.query.MultiMatchQueryBuilder.Type.BEST_FIELDS));
|
|
||||||
}
|
|
||||||
boolQuery.filter(QueryBuilders.rangeQuery(FileEsField.EXPIRE_TIME)
|
|
||||||
.gte(System.currentTimeMillis())
|
|
||||||
.timeZone("+08:00"));
|
|
||||||
|
|
||||||
SearchSourceBuilder builder = new SearchSourceBuilder()
|
SearchSourceBuilder builder = new SearchSourceBuilder()
|
||||||
.query(boolQuery)
|
.query(query)
|
||||||
.from(0)
|
.from(0)
|
||||||
.size(6)
|
.size(6)
|
||||||
.sort("_score", SortOrder.DESC);
|
.sort("_score", SortOrder.DESC);
|
||||||
@ -92,6 +86,38 @@ public class FileElasticsearchGateway {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private QueryBuilder buildAllMustSearchQuery(List<List<String>> keywordGroups) {
|
||||||
|
BoolQueryBuilder outerQuery = QueryBuilders.boolQuery();
|
||||||
|
for (List<String> group : keywordGroups) {
|
||||||
|
BoolQueryBuilder groupQuery = QueryBuilders.boolQuery();
|
||||||
|
|
||||||
|
for (String keyword : group) {
|
||||||
|
BoolQueryBuilder fieldQuery = QueryBuilders.boolQuery();
|
||||||
|
|
||||||
|
// 标题(filename)权重高
|
||||||
|
fieldQuery.should(QueryBuilders.matchPhraseQuery(FileEsField.FILENAME, keyword).boost(10.0f));
|
||||||
|
fieldQuery.should(QueryBuilders.matchPhraseQuery(FileEsField.CONTENT, keyword).boost(1.0f));
|
||||||
|
|
||||||
|
// 英文关键词额外加wildcard匹配,filename.keyword也加权
|
||||||
|
if (isEnglishLike(keyword)) {
|
||||||
|
fieldQuery.should(QueryBuilders.wildcardQuery("filename.keyword", "*" + keyword + "*").boost(10.0f));
|
||||||
|
}
|
||||||
|
|
||||||
|
groupQuery.must(fieldQuery);
|
||||||
|
}
|
||||||
|
// 必须命中所有关键词分组
|
||||||
|
outerQuery.must(groupQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 过滤过期文档
|
||||||
|
outerQuery.filter(QueryBuilders.rangeQuery(FileEsField.EXPIRE_TIME)
|
||||||
|
.gte(System.currentTimeMillis())
|
||||||
|
.timeZone("+08:00"));
|
||||||
|
|
||||||
|
return outerQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public SearchResponse searchFileDocuments(List<List<String>> keywordGroups, int page, int size) {
|
public SearchResponse searchFileDocuments(List<List<String>> keywordGroups, int page, int size) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user