Elasticsearch的关键词搜索

这篇具有很好参考价值的文章主要介绍了Elasticsearch的关键词搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

返回给前端的实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {

    private Long total;
    private List<RequestParamDoc> tkyb;

}
/*
* 前端的集合类
* */
@Data
@NoArgsConstructor
public class RequestParamDoc {
    private  float score;
    private String gsbh;
    private String gsmc;
    private String zcd;
    private String gljg;
    private String gxxl;
    private String sss;
    private String ssj;
    private String gsjc;



    public RequestParamDoc(RequestParam requestParam) {

        this.score = requestParam.getScore();
        this.gsbh = requestParam.getGsbh();
        this.gsmc = requestParam.getGsmc();
        this.zcd=requestParam.getZcd();
        this.gljg = requestParam.getGljg();
        this.gxxl = requestParam.getGxxl();
        this.sss = requestParam.getSss();
        this.ssj = requestParam.getSsj();
        this.gsjc = requestParam.getGsjc();

    }
}

es对应的实体类

/**
 *es对应的实体类
 */
@Data
public class RequestParam {

    private String gsbh;
    private String gsmc;
    private String zcd;
    private String gljg;
    private String gxxl;
    private String sss;
    private String gsjc;
    private String ssj;
    private float score;


}

前端传递的搜索参数实体类

@Data
public class RequestParams {

    private String key; //可以里面包含的是分词的所有字段
    private Integer page;
    private Integer size;



}

controller层

@RestController
public class WayController {

    @Autowired
    private IWayService wayService;

    /**
     * 关键词搜索
     * @param params
     * @return
     */
    @PostMapping("/way/list")
    public PageResult search(@RequestBody RequestParams params){

        return wayService.search(params);

    }
}

service层接口

public interface IWayService{
    /**
     * 关键词分页查询
     *
     */
    PageResult search(RequestParams params);
}

service实现类

@Slf4j
@Service
public class WayService implements IWayService  {



    @Autowired
    private RestHighLevelClient client;

    /**
     * 关键词分页查询
     *
     * @param params
     * @return
     */
    @Override
    public PageResult search(RequestParams params) {

        //获取关键词
        String key = params.getKey();

        //创建索引库的链接
        SearchRequest searchRequest = new SearchRequest("hzgs_fgb_gsxx");

        //创建查询条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //创建bool查询
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        //用公司名称跟路线名称
        if (StringUtils.isBlank(key)) {

            boolQueryBuilder.must(QueryBuilders.matchAllQuery());

        } else {

            boolQueryBuilder.must(QueryBuilders.multiMatchQuery("gsmc", key, "gxxl", key));

        }

        // 设置搜索条件
        searchSourceBuilder.query(boolQueryBuilder);

        //进行分页设置
        searchSourceBuilder.from(params.getPage());
        searchSourceBuilder.size(params.getSize());


        searchRequest.source(searchSourceBuilder);


        // 增加高亮查询
        HighlightBuilder highlightBuilder = new HighlightBuilder();

        // 设置高亮条件
        highlightBuilder.preTags("<span>");
        highlightBuilder.field("gsmc");
        highlightBuilder.postTags("</span>");
        searchSourceBuilder.highlighter(highlightBuilder);

        List<RequestParamDoc> list = new ArrayList<>();

        long total = 0L;

        try {

            //在索引库中进行查询
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            SearchHits hits = response.getHits();

            //获取总条数
            total = response.getHits().getTotalHits().value;

            for (SearchHit hit : hits) {

                String jsonStr = hit.getSourceAsString();

                //json转化为对象
                RequestParamDoc requestParamDoc = JSON.parseObject(jsonStr, RequestParamDoc.class);

                list.add(requestParamDoc);

            }

        } catch (IOException e) {
            log.error("Es搜索异常!");
            e.printStackTrace();

        }

        return new PageResult(total, list);

    }
}

Springboot启动类文章来源地址https://www.toymoban.com/news/detail-402138.html

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class WayApplication {

    public static void main(String[] args) {
        SpringApplication.run(WayApplication.class, args);
    }

    @Bean
    public RestHighLevelClient client(){

        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();

        //进行es的授权
        credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("es111","123344555"));

        //es的链接库
        return new RestHighLevelClient(RestClient.builder(HttpHost.create("http://127.0.0.1:9200")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
                httpAsyncClientBuilder.disableAuthCaching();
                return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
        }));
    }

}

到了这里,关于Elasticsearch的关键词搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 长尾关键词挖掘软件-免费的百度搜索关键词挖掘

    嗨,大家好!今天,我想和大家聊一聊长尾挖掘工具。作为一个在网络世界里摸爬滚打多年的人,我对这个话题有着一些个人的感悟和见解,希望能与大家分享。 首先,让我坦白一点,长尾挖掘工具对于我来说真是救命稻草。在我刚开始做网站优化和内容创作的

    2024年02月09日
    浏览(75)
  • X书关键词协议搜索

    搜索接口中的其他java层加密,详细见: https://codeooo.blog.csdn.net/article/details/122986633

    2024年02月16日
    浏览(31)
  • VIM统计搜索关键词命令

    :%s/.//gn        统计字符数 :%s/i+//gn    统计单词数 :%s/^//n           统计行数 :%s/keyword//g      统计任何地方出现的 \\\"keyword\\\"   :%s/keyword//gn    统计任何地方出现的 \\\"keyword\\\" :%s/keyword/ :这部分是 Vim 的替换命令的开头。:%s 表示在整个文件范围内进行替换操作。keyword 是要查

    2024年02月09日
    浏览(46)
  • 网站优化搜索引擎与关键词

    网站优化搜索引擎与 人们不应该高估搜索引擎的智商。这不利于seo的研究,事实上,搜索引擎是非常愚蠢的,让我们举一个非常简单的例子,你在搜索引擎中输入“教师”这个词,搜索引擎就会给出一个准确的搜索列表。我们不会给出“教师”一词的检索信息,但我们

    2024年02月09日
    浏览(70)
  • Vue实现搜索关键词高亮显示

    最近写移动端项目的时候,遇到搜索高亮的需求,写篇文章纪录一下 先看效果:   以上为实现效果展示; 整体思路 : 对后台返回的数据进行操作,(我这里是模拟数据),使用正则去匹配搜索后,使用replace进行字符串的替换; 渲染数据部分使用v-html进行动态展示即可

    2024年02月15日
    浏览(36)
  • highlight.js 实现搜索关键词高亮效果

    先看效果: 更新:增加切换显示 折腾了老半天,记录一下 注意事项都写注释了 代码: 更新后代码:

    2024年02月02日
    浏览(39)
  • Python获取高德POI(关键词搜索法)

    该篇文章是搜索法获取高德poi,但鉴于无法突破900条记录的上限,因此重写了 矩形搜索法 的文章,具体可参考以下文章: 高德poi获取之矩形搜索法(冲出900条限制) (建议没有python基础的朋友先阅读该篇再看矩形搜索法!) 首先我们需要明白一些常识 poi是兴趣点,它

    2024年02月06日
    浏览(44)
  • 抖音关键词搜索小程序排名怎么做

    抖音搜索小程序排名怎么做 1 分钟教你制作一个抖音小程序。 抖音小程序就是我的视频,左下方这个蓝色的链接,点进去就是抖音小程序。 如果你有了这个小程序,发布视频的时候可以挂载这个小程序,直播的时候也可以挂载这个小程序进行带货。   制作小程序一共

    2024年02月13日
    浏览(51)
  • 搜索引擎都有哪些关键词匹配方式

     1. 完全匹配 这个应该是很多SEO最熟悉的一种匹配方式了,什么是完全匹配呢?比如说我的是“SEO培训”,如果网站中完整的出现了这个词,并且的位置也匹配,这样就是完全匹配。这里需要特别明确说的一点就是,完全匹配一定是一个单独的才是,什么是

    2024年02月13日
    浏览(35)
  • 【爬虫】根据关键词自动搜索并爬取结果

    根据自动搜索并爬取网页的信息 网页有两种情况:可以直接获取页数的和不可以直接获取页数的; 两种情况可以采取不同的方法: 情况一:先爬取页数,再爬取每页的数据 情况二:无法爬取到页码数,只能换页爬取的

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包