提交 dcb4de0c 作者: yanxin

知识库检索逻辑优化

上级 0728e2b0
......@@ -370,6 +370,9 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec
@Override
public List<KbKnowledgeProject> getUserList() {
List<String> userIds = knowledgeService.groupUserList(Constants.SC_USER);
if(userIds.isEmpty()){
return new ArrayList<>();
}
return kbKnowledgeProjectMapper.getListByUser(userIds);
}
......
......@@ -41,10 +41,7 @@ import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
......@@ -496,49 +493,44 @@ class KnowledgeServiceImpl implements IKnowledgeService {
//搜索条件
if (StringUtils.isNotBlank(knowledgeParam.getSearchInfo())) {
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(knowledgeParam.getSearchInfo());
if ("精确".equals(knowledgeParam.getSearchAccuracy())) {
if ("模糊".equals(knowledgeParam.getSearchAccuracy())) {
multiMatchQueryBuilder.type(MultiMatchQueryBuilder.Type.PHRASE);
if (null != knowledgeParam.getSearchScope() && Integer.valueOf(1).equals(knowledgeParam.getSearchScope())) {
multiMatchQueryBuilder.field("title");
boolQuery.must(multiMatchQueryBuilder);
boolQuery.must(QueryBuilders.matchQuery("title", knowledgeParam.getSearchInfo()));
} else if (null != knowledgeParam.getSearchScope() && Integer.valueOf(2).equals(knowledgeParam.getSearchScope())) {
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content");
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("contents.content", knowledgeParam.getSearchInfo());
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", matchQueryBuilder, ScoreMode.None);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(nestedQueryBuilder);
boolQueryBuilder.should(QueryBuilders.matchPhraseQuery("contentWithTag", knowledgeParam.getSearchInfo()));
boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery("contentWithTag", knowledgeParam.getSearchInfo()));
boolQuery.must(boolQueryBuilder);
} else {
multiMatchQueryBuilder.field("title", 60);
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content", 20);
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("contents.content", knowledgeParam.getSearchInfo());
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", matchQueryBuilder, ScoreMode.None);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(nestedQueryBuilder);
boolQueryBuilder.should(QueryBuilders.matchQuery("contentWithTag", knowledgeParam.getSearchInfo()));
boolQueryBuilder.should(QueryBuilders.matchQuery("title", knowledgeParam.getSearchInfo()));
boolQuery.must(boolQueryBuilder);
}
} else {
if (null != knowledgeParam.getSearchScope() && Integer.valueOf(1).equals(knowledgeParam.getSearchScope())) {
multiMatchQueryBuilder.field("title");
boolQuery.must(multiMatchQueryBuilder);
boolQuery.must(QueryBuilders.matchPhrasePrefixQuery("title", knowledgeParam.getSearchInfo()));
} else if (null != knowledgeParam.getSearchScope() && Integer.valueOf(2).equals(knowledgeParam.getSearchScope())) {
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content");
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
MatchPhrasePrefixQueryBuilder matchPhrasePrefixQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("contents.content", knowledgeParam.getSearchInfo());
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", matchPhrasePrefixQueryBuilder, ScoreMode.None);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(nestedQueryBuilder);
boolQueryBuilder.should(QueryBuilders.matchQuery("contentWithTag", knowledgeParam.getSearchInfo()));
boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery("contentWithTag", knowledgeParam.getSearchInfo()));
boolQuery.must(boolQueryBuilder);
} else {
multiMatchQueryBuilder.field("title", 3);
BoolQueryBuilder nestedBoolQueryBuilder = QueryBuilders.boolQuery();
multiMatchQueryBuilder.field("contents.content", 1);
nestedBoolQueryBuilder.must(multiMatchQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", nestedBoolQueryBuilder, ScoreMode.None);
boolQuery.must(nestedQueryBuilder);
MatchPhrasePrefixQueryBuilder matchPhrasePrefixQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("contents.content", knowledgeParam.getSearchInfo());
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("contents", matchPhrasePrefixQueryBuilder, ScoreMode.None);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(nestedQueryBuilder);
boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery("contentWithTag", knowledgeParam.getSearchInfo()));
boolQueryBuilder.should(QueryBuilders.matchPhrasePrefixQuery("title", knowledgeParam.getSearchInfo()));
boolQuery.must(boolQueryBuilder);
}
}
}
......
......@@ -27,6 +27,10 @@ spring:
brokers: 114.116.36.231:9092
zkNodes: 114.116.36.231:2181
requiredAcks: 1
# configuration:
# security.protocol: SASL_PLAINTEXT
# sasl.mechanism: PLAIN
# sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="gangtie" password="krJZbb#S5UNR";
redis:
database: 9
host: 114.116.90.53
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论