opt
This commit is contained in:
parent
69a3a1bb49
commit
566ed1d880
@ -57,20 +57,14 @@ public class FileElasticsearchGateway {
|
||||
if (CollectionUtil.isEmpty(keywords)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
List<List<String>> keywordGroups = keywords.stream()
|
||||
.map(Collections::singletonList)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
|
||||
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"));
|
||||
QueryBuilder query = buildAllMustSearchQuery(keywordGroups);
|
||||
|
||||
SearchSourceBuilder builder = new SearchSourceBuilder()
|
||||
.query(boolQuery)
|
||||
.query(query)
|
||||
.from(0)
|
||||
.size(6)
|
||||
.sort("_score", SortOrder.DESC);
|
||||
@ -92,6 +86,38 @@ public class FileElasticsearchGateway {
|
||||
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) {
|
||||
try {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user