分布式搜索引擎ElasticSearch——搜索功能

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

分布式搜索引擎ElasticSearch——搜索功能


分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

DSL查询文档

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

DSL查询分类

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
DSL官方文档
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

全文检索查询

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

精确查询

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

地理查询

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

复合查询

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

Function Score Query

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
function score query
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

Boolean Query

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

搜索结果处理

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

排序分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

分页

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
官方文档
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

高亮

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

RestClient查询文档

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

快速入门

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch


public class HotelSearchTest {
    private RestHighLevelClient client;

    @Test
    void testMatchAll() throws IOException {
        // 1. 准备Request
        SearchRequest request = new SearchRequest("hotel");
        // 2. 准备DSL
        request.source().query(QueryBuilders.matchAllQuery());
        // 3. 发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);

        // 4. 解析响应
        SearchHits searchHits = response.getHits();
        // 4.1 获取总条数
        long total = searchHits.getTotalHits().value;
        System.out.println("共搜索到" + total + "条数据");
        // 4.2 文档数组
        SearchHit[] hits = searchHits.getHits();
        // 4.3 遍历
        for (SearchHit hit : hits) {
            // 获取文档source
            String json = hit.getSourceAsString();
            // 反序列化
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
            System.out.println("hotelDoc = " + hotelDoc);
        }
        System.out.println(response);
    }

    @BeforeEach
    void setUp(){
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.10.88:9200")
        ));
    }

    @AfterEach
    void tearDown() throws IOException {
        this.client.close();
    }
}

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

match,term,range,bool查询

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

  // 全文检索查询
    @Test
    void testMatch() throws IOException {
        // 1. 准备Request
        SearchRequest request = new SearchRequest("hotel");
        // 2. 准备DSL
        request.source().query(QueryBuilders.matchQuery("all","皇冠"));
        // 3. 发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);

        handleResponse(response);
        System.out.println(response);
    }

    // bool查询
    @Test
    void testBool() throws IOException {
        // 1. 准备Request
        SearchRequest request = new SearchRequest("hotel");
        // 2. 准备DSL
        // 2.1 准备BooleanQuery
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        // 2.2 添加term
        boolQuery.must(QueryBuilders.termQuery("city","杭州"));
        // 2.3 添加range
        boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));

        request.source().query(boolQuery);
        // 3. 发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);

        handleResponse(response);
        System.out.println(response);
    }

    // 抽取解析的代码
    private static void handleResponse(SearchResponse response) {
        // 4. 解析响应
        SearchHits searchHits = response.getHits();
        // 4.1 获取总条数
        long total = searchHits.getTotalHits().value;
        System.out.println("共搜索到" + total + "条数据");
        // 4.2 文档数组
        SearchHit[] hits = searchHits.getHits();
        // 4.3 遍历
        for (SearchHit hit : hits) {
            // 获取文档source
            String json = hit.getSourceAsString();
            // 反序列化
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
            System.out.println("hotelDoc = " + hotelDoc);
        }
    }

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

排序和分页

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

// 排序和分页
    @Test
    void testPageAndSort() throws IOException {
        // 页码。每页大小
        int page  = 2, size  = 5;
        // 1. 准备Request
        SearchRequest request = new SearchRequest("hotel");
        // 2. 准备DSL
        // 2.1 query
        request.source().query(QueryBuilders.matchAllQuery());
        // 2.2 配许sort
        request.source().sort("price", SortOrder.ASC);
        // 2.3 分页from, size
        request.source().from((page-1)*size).size(5);
        // 3. 发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        // 4. 解析响应
        handleResponse(response);
    }

高亮显示

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

 // 高亮
    @Test
    void testHighlight() throws IOException {
        // 1. 准备Request
        SearchRequest request = new SearchRequest("hotel");
        // 2. 准备DSL
        // 2.1 query
        request.source().query(QueryBuilders.matchQuery("all","如家"));
        // 2.2 高亮
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
        // 3. 发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        // 4. 解析响应
        handleResponse(response);
    }

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
就是在前面抽取的解析代码中进一步添加关于高亮的解析部分,因为highlight和source是同级目录的,所以采用的方法类似。

  // 抽取解析的代码
    private static void handleResponse(SearchResponse response) {
        // 4. 解析响应
        SearchHits searchHits = response.getHits();
        // 4.1 获取总条数
        long total = searchHits.getTotalHits().value;
        System.out.println("共搜索到" + total + "条数据");
        // 4.2 文档数组
        SearchHit[] hits = searchHits.getHits();
        // 4.3 遍历
        for (SearchHit hit : hits) {
            // 获取文档source
            String json = hit.getSourceAsString();
            // 反序列化
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
            // 获取高亮结果
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            if(!CollectionUtils.isEmpty(highlightFields)){
                // 根据字段名获取高亮结果
                HighlightField highlightField = highlightFields.get("name");
                if(highlightField != null){
                    //  获取高亮值
                    String name = highlightField.getFragments()[0].string();
                    // 覆盖非高亮结果
                    hotelDoc.setName(name);
                }
            }
            System.out.println("hotelDoc = " + hotelDoc);
        }
    }

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

黑马旅游案例

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

基本的搜索和分页

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

@RestController
@RequestMapping("/hotel")
public class HotelController {

    @Autowired
    private IHotelService hotelService;

    @PostMapping("/list")
    public PageResult search(@RequestBody RequestParams params){
        return hotelService.search(params);
    }
}

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

@Service
public class HotelService extends ServiceImpl<HotelMapper, Hotel> implements IHotelService {

    @Autowired
    private RestHighLevelClient client;

    @Override
    public PageResult search(RequestParams params) {
        try {// 1. 准备Request
            SearchRequest request = new SearchRequest("hotel");
            // 2. 准备DSL
            // 2.1 query
            String key = params.getKey();
            if (key == null || "".equals(key)) {
                request.source().query(QueryBuilders.matchAllQuery());
            } else {
                request.source().query(QueryBuilders.matchQuery("all", key));
            }
            // 2.2 分页
            int page = params.getPage();
            int size = params.getSize();
            request.source().from((page - 1) * size).size(size);
            // 3. 发送请求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            // 4. 解析响应
            return handleResponse(response);
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }


    // 抽取解析的代码
    private PageResult handleResponse(SearchResponse response) {
        // 4. 解析响应
        SearchHits searchHits = response.getHits();
        // 4.1 获取总条数
        long total = searchHits.getTotalHits().value;
        // 4.2 文档数组
        SearchHit[] hits = searchHits.getHits();

        // 4.3 遍历
        List<HotelDoc> hotels = new ArrayList<>();
        for (SearchHit hit : hits) {
            // 获取文档source
            String json = hit.getSourceAsString();
            // 反序列化
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
            hotels.add(hotelDoc);
        }
        // 4.4 封装返回
        return new PageResult(total,hotels);
    }


}

条件过滤

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

@Override
    public PageResult search(RequestParams params) {
        try {// 1. 准备Request
            SearchRequest request = new SearchRequest("hotel");
            // 2. 准备DSL
            // 2.1 query
            // 构建BooleanQuery

            buildBasicQuery(params, request);

            // 2.2 分页
            int page = params.getPage();
            int size = params.getSize();
            request.source().from((page - 1) * size).size(size);
            // 3. 发送请求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            // 4. 解析响应
            return handleResponse(response);
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }

    private static void buildBasicQuery(RequestParams params, SearchRequest request) {
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        // 关键字搜索
        String key = params.getKey();
        if (key == null || "".equals(key)) {
            boolQuery.must(QueryBuilders.matchAllQuery());
        } else {
            boolQuery.must(QueryBuilders.matchQuery("all", key));
        }
        // 条件过滤
        // 城市
        if(params.getCity() !=  null && !"".equals(params.getCity())){
            boolQuery.filter(QueryBuilders.termQuery("city", params.getCity()));
        }
        // 品牌
        if(params.getBrand() !=  null && !"".equals(params.getBrand())){
            boolQuery.filter(QueryBuilders.termQuery("brand", params.getBrand()));
        }
        // 星级
        if(params.getStarName() !=  null && !"".equals(params.getStarName())){
            boolQuery.filter(QueryBuilders.termQuery("starName", params.getStarName()));
        }
        // 价格——范围过滤
        if(params.getMinPrice() != null && params.getMaxPrice() != null){
            boolQuery.filter(QueryBuilders.rangeQuery("price").gte(params.getMinPrice()).lte(params.getMaxPrice()));
        }

        request.source().query(boolQuery);
    }

找周边的酒店

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch

广告置顶

分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch
分布式搜索引擎ElasticSearch——搜索功能,搜索引擎,分布式,elasticsearch文章来源地址https://www.toymoban.com/news/detail-791452.html

        // 2.  算分控制
        FunctionScoreQueryBuilder functionScoreQuery =
                QueryBuilders.functionScoreQuery(
                        // 原始查询,相关性算分的查询
                        boolQuery,
                        // function score的数组
                        new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                                //  其中的一个function score元素
                                new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                                        // 过滤条件
                                        QueryBuilders.termQuery("isAD",true),
                                        // 算分函数
                                        ScoreFunctionBuilders.weightFactorFunction(10)
                                )
                        });

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

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

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

相关文章

  • 分布式搜索引擎-elasticsearch基础

    elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在 日志数据分析 、 实时监控 等领域。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 Lucen

    2024年03月20日
    浏览(52)
  • # 分布式搜索引擎-- elasticsearch基础

    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,,可以用来实现搜索、日志统计、分析、系统监控等功能    是以elasticsearch为核心的技术栈,都包括: ElasticSearch(存储,计算,搜索数据) kibana(数据可视化) Logstas

    2024年03月27日
    浏览(54)
  • 分布式搜索引擎ElasticSearch——基础

    什么是elasticsearch elasticsearch的发展 https://lucene.apache.org/ https://www.elastic.co/cn/ 正向索引和倒排索引 安装elasticsearch,kibana https://github.com/medcl/elasticsearch-analysis-ik 部署单点es 创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: 加载镜像

    2024年01月17日
    浏览(38)
  • Elasticsearch 分布式搜索引擎 速学

            elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,它结合kibana、Logstash、Beats,也就是elastic stack(ELK)。它被广泛应用在日志数据分析、实时监控等领域,而elasticsearch是elastic stack的核心,负责存储

    2024年02月03日
    浏览(81)
  • 分布式搜索引擎elasticsearch(一)

    elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 文档(document):每条数据就是一个文档 词条(term):文档按照语义分成的词语 倒排索引中包含两部分内容: 词条词

    2024年02月02日
    浏览(89)
  • 分布式搜索引擎ElasticSearch——深入elasticSearch

    聚合的分类 DSL实现Bucket聚合 DSL实现Metric聚合 RestAPI实现聚合 https://github.com/medcl/elasticsearch-analysis-pinyin DSL实现自动补全查询 Completion Suggester 修改酒店索引库数据结构 RestAPI实现自动补全查询 实现酒店搜索页面输入框的自动补全 数据同步思路分析 利用MQ实现mysql与elasticsearch数

    2024年01月17日
    浏览(40)
  • 分布式搜索引擎Elasticsearch基础入门学习

    Elasticsearh 是 elastic.co 公司开发的分布式搜索引擎。 Elasticsearch(简称ES)是一个开源的分布式、高度可扩展的全文搜索和分析引擎。它能够快速、近乎实时的存储、搜索和分析大量数据。适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型数据。 它通

    2024年02月03日
    浏览(34)
  • 微服务---分布式搜索引擎 elasticsearch基础

    1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 1.1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats,

    2024年02月04日
    浏览(40)
  • ElasticSearch分布式搜索引擎(两万字详解)

    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域: 而elasticsearch是elastic stack的核心,负责存储、搜索

    2024年01月25日
    浏览(47)
  • Elasticsearch 分布式全文搜索引擎原理解析

    作者:禅与计算机程序设计艺术 Elasticsearch是一个开源的分布式全文搜索引擎,它可以近实时地存储、检索数据。本系列文章将从以下几个方面对Elasticsearch进行深入分析: Elasticsearch的主要组成部分 索引、类型和映射(Mapping) 搜索请求处理流程 查询缓存机制 Elasticsearch集群

    2024年02月05日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包