123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package com.winhc.phoenix.example.service.impl;
- import com.winhc.phoenix.example.dao.SearchDao;
- import com.winhc.phoenix.example.service.SearchService;
- import com.winhc.phoenix.example.util.SortUtil;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.elasticsearch.common.lucene.search.function.CombineFunction;
- import org.elasticsearch.common.lucene.search.function.FiltersFunctionScoreQuery;
- import org.elasticsearch.index.query.BoolQueryBuilder;
- import org.elasticsearch.index.query.MultiMatchQueryBuilder;
- import org.elasticsearch.index.query.Operator;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
- import org.elasticsearch.index.query.functionscore.ScriptScoreFunctionBuilder;
- import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
- import org.elasticsearch.search.sort.ScriptSortBuilder;
- import org.springframework.stereotype.Service;
- import static org.elasticsearch.index.query.QueryBuilders.*;
- /**
- * @author: XuJiakai
- * 2020/12/8 19:12
- */
- @Slf4j
- @Service(SearchV8SimpServiceImpl.index)
- @AllArgsConstructor
- public class SearchV8SimpServiceImpl implements SearchService {
- private SearchDao searchDao;
- public static final String index = "winhc-company-v8-simp";
- public static final String type = "company";
- private static final String[] includes_tips = new String[]{"cname.show","new_cid"};
- private static final FetchSourceContext fetchSourceContext_tips = new FetchSourceContext(true, includes_tips, null);
- @Override
- public Object tips(String s) {
- BoolQueryBuilder boolQuery = getBoolQuery(s);
- ScriptSortBuilder scriptSortBuilder = SortUtil.getInstance().fastSort;
- FunctionScoreQueryBuilder function = functionScoreQuery(boolQuery, new ScriptScoreFunctionBuilder(scriptSortBuilder.script())
- )
- .scoreMode(FiltersFunctionScoreQuery.ScoreMode.SUM)
- .boostMode(CombineFunction.MULTIPLY);
- Object search = searchDao.search(index, type, function, null, fetchSourceContext_tips, 0, 5);
- return search;
- }
- @Override
- public Object controlGroup(String s) {
- return searchDao.search(index, type, getBoolQuery(s), null, fetchSourceContext_tips, 0, 10);
- }
- @Override
- public Object query(String s, int from, int size) {
- BoolQueryBuilder boolQuery = getBoolQuery(s);
- ScriptSortBuilder scriptSortBuilder = SortUtil.getInstance().fastSort;
- FunctionScoreQueryBuilder function = functionScoreQuery(boolQuery, new ScriptScoreFunctionBuilder(scriptSortBuilder.script())
- )
- .boostMode(CombineFunction.MULTIPLY);
- Object search = searchDao.search(index, type, function, null, fetchSourceContext_tips, from, size);
- return search;
- }
- private BoolQueryBuilder getBoolQuery(String content) {
- BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
- MultiMatchQueryBuilder multiMatchQueryBuilder = multiMatchQuery(content)
- .operator(Operator.AND)
- .type(MultiMatchQueryBuilder.Type.CROSS_FIELDS)
- .minimumShouldMatch("5<80%")
- .tieBreaker(0.3F);
- boolQuery.should(termQuery("cname.value.keyword", content).boost(100));
- boolQuery.should(termQuery("history_name.value.keyword", content).boost(100));
- boolQuery.should(disMaxQuery().add(
- QueryBuilders.boolQuery()
- .should(termQuery("app_info.keyword", content).boost(40))
- .should(termQuery("company_tm.keyword", content).boost(20))
- ).tieBreaker(0.3F)
- );
- boolQuery.should(disMaxQuery().add(
- QueryBuilders.boolQuery()
- .should(matchQuery("app_info", content).boost(15))
- .should(matchQuery("company_tm", content).boost(5))
- .should(termQuery("app_info.keyword", content).boost(40))
- .should(termQuery("company_tm.keyword", content).boost(20))
- .minimumShouldMatch("5<80%")
- ).tieBreaker(0.4F)
- );
- multiMatchQueryBuilder
- .field("cname.value", 16)
- .field("history_name.value", 12)
- ;
- boolQuery.should(multiMatchQueryBuilder);
- BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
- boolQuery2.must(boolQuery);
- return boolQuery2;
- }
- }
|