代码编织梦想

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
 
@Configuration
public class ElasticsearchConfig {
 
 
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        return new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.150.101:9200")
        ));
    }
}

 

@Data
public class Demo{

    // 用于附近店铺,得到排序信息
    private Object distance;
}

@Data
public class RequestParams {

    private Integer page;
    private Integer size;
    // location的格式为 "经度,纬度“
    private String location;

}

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

@Slf4j
@Service
public class DemoService extends ServiceImpl<DemoMapper, Demo> implements IDemoService {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @Override
    public PageResult search(RequestParams params) {
        try {
            
            // 1.准备Request
            SearchRequest request = new SearchRequest("demo");
            // 2.准备请求参数
            // 2.1.分页
            int page = params.getPage();
            int size = params.getSize();
            request.source().from((page - 1) * size).size(size);

            // ==============================================================

            // 2.2.距离排序
            String location = params.getLocation();
            if (StringUtils.isNotBlank(location)) {
                request.source().sort(SortBuilders
                                      // "location" es中的参数
                                      .geoDistanceSort("location", new GeoPoint(location))
                                      .order(SortOrder.ASC)
                                      .unit(DistanceUnit.KILOMETERS)
                                     );
            }

            // ==============================================================

            // 3.发送请求
            SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
            // 4.解析响应
            return handleResponse(response);
        } catch (IOException e) {
            throw new RuntimeException("搜索数据失败", e);
        }
    }


    private PageResult handleResponse(SearchResponse response) {
        SearchHits searchHits = response.getHits();
        // 4.1.总条数
        long total = searchHits.getTotalHits().value;
        // 4.2.获取文档数组
        SearchHit[] hits = searchHits.getHits();
        // 4.3.遍历
        List<Demo> demoList = new ArrayList<>(hits.length);
        for (SearchHit hit : hits) {

            // 4.4.获取source
            String json = hit.getSourceAsString();
            // 4.5.反序列化,非高亮的
            Demo demo= JSON.parseObject(json, Demo.class);

            // =======================================================

            // 4.6.排序信息
            Object[] sortValues = hit.getSortValues();
            if (sortValues.length > 0) {
                demo.setDistance(sortValues[0]);
            }

            // =======================================================

            // 4.7.放入集合
            demoList.add(demo);
        }
        return new PageResult(total, hotels);
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45427648/article/details/129829149

用elasticsearch构建电商搜索平台,一个极有代表性的基础技术架构和算法实践案例-爱代码爱编程

随着互联网数据规模的爆炸式增长,如何从海量的历史,实时数据中快速获取有用的信息,变得越来越有挑战性。 电商数据系统主要类型 一个中等的电商平台,每天都要产生百万条原始数据,上亿条用户行为数据。一般来说,电商数据一般有3种主要类型的数据系统: 关系型数据库,大多数互联网公司会选用mysql作为关数据库的主选,用于存储商品,用户信息等数据。 关系

用elasticsearch构建电商搜索平台_weixin_33947521的博客-爱代码爱编程

电商数据系统主要类型 一个中等的电商平台,每天都要产生百万条原始数据,上亿条用户行为数据。一般来说,电商数据一般有3种主要类型的数据系统: 关系型数据库 ,大多数互联网公司会选用mysql作为关数据库的主选,用于存储商品,用户信息等数据。 关系型数据库对于事务性非常高的OLTP操作(比如订单,结算等)支持良好。 hadoop生态 ,had

用elasticsearch构建电商搜索平台(有赞)_王卫东的博客-爱代码爱编程_es 电商

随着互联网数据规模的爆炸式增长,如何从海量的历史,实时数据中快速获取有用的信息,变得越来越有挑战性。 电商数据系统主要类型 一个中等的电商平台,每天都要产生百万条原始数据,上亿条用户行为数据。一般来说,电商数据一般有3种主要类型的数据系统: 关系型数据库 ,大多数互联网公司会选用mysql作为关数据库的主选,用于存储商品,用户信息等数据。 关系

Elasticsearch func_score-爱代码爱编程

场景介绍 衰减函数 总结 官网文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/query-dsl-function-score-query.html 作者公众号: 1.场景介绍 在全文检索中,排序是一个很讲究的事。关键字命中,是全文检索中一个很关键的因素。然而,某些时

es7.8附近的人附近的门店查询-爱代码爱编程

坐标 附近的门店 geo_point经纬度坐标类型 DELETE index2 PUT index2 PUT index2/_mapping { "properties":{ "shop":{ "properties":{ "id":{ "type":"integer" },

ElasticSearch地理位置查询与分组-爱代码爱编程

一、 使用场景 根据用户当前所在的地理位置坐标,按商品关键字查询出附近店铺的相关商品,并按店铺位置远近将搜索结果排序。 二、 场景说明 1、 按商品关键字搜索,比如关键字为“牛奶”,那么需要搜索出附近店铺发布的带有“牛奶”关键字的商品。 2、 商品不会带有位置信息,但是商品所属的店铺是有位置信息的,因此要将店铺的位置信息存放进商品的ES索引中。 三、 具体

SpringBoot 2.5.0 集成 Elasticsearch-爱代码爱编程

Maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependenc

elasticsearch搜索分数自定义以及相关度计算相关-爱代码爱编程

elasticsearch搜索分数自定义以及相关度计算相关 es通过其score字段对搜索结果进行排序 在进行业务开发时通常其默认的分数计算是不符合预期的。 最简单的方法是通过boost字段来对每一个字段进行权重设置,来体现该字段的重要性。 boost字段会导致分数的计算公式发生改变,boost默认为1 例如: GET productinfo/_se

java关于搜索附近功能开发探讨_华安小书童的博客-爱代码爱编程

最近项目开发项目。小程序增加了搜索附近的任务功能。原来使用redisGEO实现了此功能。此后增加需求按条件查询附近的功能。想看看使用MySQL去实现该需要。经过分析和查询后可以有两种实现方案,在此记录下。 方案一

redis实战——附近商家(geo的使用)-爱代码爱编程

1. 什么是Geo? GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member) GEODIST:计算指定的两个点之间的距

用es实现根据经纬度由近及远推荐店铺-爱代码爱编程

一、介绍 ES中特有的类型geo_point,是用来存储地图类型的。店铺推荐、地图搜索和外卖平台等,实现目标距离你多少米,就是用这个数据类型做出来的。 其中,ES支持的地图检索方式有以下几种; geo_distance:直线距离检索,如给定点A,要求返回地图上距离点A三千米的店铺 geo_bounding_box:以两个点确定一个矩形,获取在矩

分布式搜索引擎elasticsearch-爱代码爱编程

elasticsearch:一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析 elastic stack(ELK):是以elasticsearch为核心的技术栈 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK),被广泛应用在日志数据分析、实时监控等领域 elasticsearc

【开发】中间件——elasticsearch-爱代码爱编程

ElasticSearch是一个基于Lucene的搜索服务器。提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口 ES简介与安装 ES简介 ElasticSearch是一个基于Lucene的搜

springcloud:elasticsearch之索引库操作-爱代码爱编程

ElasticSearch索引库就类似数据库表,mapping映射就类似表的结构。 我们要向ElasticSearch中存储数据,必须先创建“库”和“表”。 1.mapping映射属性 mapping是对索引库中文档的

美团外卖搜索基于elasticsearch的优化实践-爱代码爱编程

美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-Based Service(LBS)业务场景对Elasticsearch的查询性能进行优化。该优化基于Run-Length Encoding(RLE)设计了一款高效的倒排索引结构,使检索耗时(TP99)降低了84%。本文从问题分析、技术选型、优化方案等方面进行阐

graylog单机升级集群_graylog新增节点-爱代码爱编程

📚概述 前期可能存在资源紧张,Graylog以单机形式部署,后期有富有资源时需要进行升级。升级过程中主要是Elasticsearch单机升级集群问题较多。mongoDB和Graylog升级问题较少。 🎫服务器说