提交 dcb4de0c 作者: yanxin

知识库检索逻辑优化

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