当前位置: 首页 > news >正文

网站开发小组分工淘宝做网站的多少钱

网站开发小组分工,淘宝做网站的多少钱,电商平台开发需要哪些技术人员,外贸流程及详细介绍文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 旅游案例酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名 elasticsearch最擅长的是 搜索和 数据分析。 数据搜索 DSL实现 查询文档 常见的查询类型包括#xff1a; 查询所有#xff1a;查询出所有数… 文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 旅游案例酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名 elasticsearch最擅长的是 搜索和 数据分析。 数据搜索 DSL实现 查询文档 常见的查询类型包括 查询所有查询出所有数据一般测试用。例如match_all全文检索full text查询利用分词器对用户输入内容分词然后去倒排索引库中匹配。例如 match_querymulti_match_query 精确查询根据精确词条值查找数据一般是查找keyword、数值、日期、boolean等类型字段。例如 idsrangeterm 地理geo查询根据经纬度查询。例如 geo_distancegeo_bounding_box 复合compound查询复合查询可以将上述各种查询条件组合起来合并查询条件。例如 boolfunction_score 全文检索查询 使用场景 全文检索查询的基本流程如下 对用户搜索的内容做分词得到词条根据词条去倒排索引库中匹配得到文档id根据文档id找到文档返回给用户 比较常用的场景包括 商城的输入框搜索百度输入框搜索 可以看到两种查询结果是一样的为什么 因为我们将brand、name、business值都利用copy_to复制到了all字段中。因此你根据三个字段搜索和根据all字段搜索效果当然一样了。 但是搜索字段越多对查询性能影响越大因此建议采用copy_to然后单字段查询的方式。 精准查询 精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有 term根据词条精确值查询range根据值的范围查询 范围查询一般应用在对数值类型做范围过滤的时候。比如做价格范围过滤。 精确查询常见的有哪些 term查询根据词条精确匹配一般搜索keyword类型、数值类型、布尔类型、日期类型字段range查询根据数值范围查询可以是数值、日期的范围 地理坐标查询 附近查询也叫做距离查询geo_distance查询到指定中心点小于某个距离值的所有文档 复合查询 复合compound查询复合查询可以将其它简单查询组合起来实现更复杂的搜索逻辑。常见的有两种 fuction score算分函数查询可以控制文档相关性算分控制文档排名 bool query布尔查询利用逻辑关系组合多个其它的查询实现复杂搜索 function score的运行流程如下 1根据原始条件查询搜索文档并且计算相关性算分称为原始算分query score 2根据过滤条件过滤文档 3符合过滤条件的文档基于算分函数运算得到函数算分function score 4将原始算分query score和函数算分function score基于运算模式做运算得到最终结果作为相关性算分。 function score query定义的三要素是什么 过滤条件哪些文档要加分算分函数如何计算function score加权方式function score 与 query score如何运算 布尔查询 布尔查询是一个或多个查询子句的组合每一个子句就是一个子查询。子查询的组合方式有 must必须匹配每个子查询类似“与”should选择性匹配子查询类似“或”must_not必须不匹配不参与算分类似“非”filter必须匹配不参与算分 比如在搜索酒店时除了关键字搜索外我们还可能根据品牌、价格、城市等字段做过滤 每一个不同的字段其查询的条件、方式都不一样必须是多个不同的查询而要组合这些查询就必须用bool查询了。 需要注意的是搜索时参与打分的字段越多查询的性能也越差。因此这种多条件查询时建议这样做 搜索框的关键字搜索是全文检索查询使用must查询参与算分其它过滤条件采用filter查询。不参与算分 示例 需求搜索名字包含“如家”价格不高于400在坐标31.21,121.5周围10km范围内的酒店。 分析 名称搜索属于全文检索查询应该参与算分。放到must中价格不高于400用range查询属于过滤条件不参与算分。放到must_not中周围10km范围内用geo_distance查询属于过滤条件不参与算分。放到filter中 搜索结果处理 排序 普通字段排序 地理坐标排序 分页 from从第几个文档开始size总共查询几个文档 分页查询的常见实现方案以及优缺点 from size 优点支持随机翻页缺点深度分页问题默认查询上限from size是10000场景百度、京东、谷歌、淘宝这样的随机翻页搜索 after search 优点没有查询上限单次查询的size不超过10000缺点只能向后逐页查询不支持随机翻页场景没有随机翻页需求的搜索例如手机向下滚动翻页 高亮 高亮显示的实现分为两步 1给文档中的所有关键字都添加一个标签例如em标签 2页面给em标签编写CSS样式 注意 高亮是对关键字高亮因此搜索条件必须带有关键字而不能是范围这样的查询。 默认情况下高亮的字段必须与搜索指定的字段一致否则无法高亮 如果要对非搜索字段高亮则需要添加一个属性required_field_matchfalse 总结 查询的DSL是一个大的JSON对象包含下列属性 query查询条件from和size分页条件sort排序条件highlight高亮条件 RestClient实现 简单实现 Test void testMatchAll() throws IOException {// 1.准备RequestSearchRequest request new SearchRequest(hotel);// 2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());// 3.发送请求SearchResponse response client.search(request, RequestOptions.DEFAULT);// 4.解析响应handleResponse(response); }private 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) {// 获取文档sourceString json hit.getSourceAsString();// 反序列化HotelDoc hotelDoc JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc hotelDoc);} }查询的基本步骤是 创建SearchRequest对象 准备Request.source()也就是DSL。 ① QueryBuilders来构建查询条件 ② 传入Request.source() 的 query() 方法 发送请求得到结果 解析结果参考JSON结果从外到内逐层解析 精确查询 布尔查询 排序、分页 搜索结果的排序和分页是与query同级的参数因此同样是使用request.source()来设置。 高亮 高亮的结果与查询的文档结果默认是分离的并不在一起。 因此解析高亮的代码需要额外处理 旅游案例 我们实现四部分功能 酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名 酒店搜索和分页 前端请求的json结构如下 定义一个实体类 返回值 分页查询需要返回分页结果PageResult包含两个属性 total总条数ListHotelDoc当前页的数据 定义controller 实现业务搜索 我们在controller调用了IHotelService并没有实现该方法因此下面我们就在IHotelService中定义方法并且去实现业务逻辑。 实现搜索业务肯定离不开RestHighLevelClient我们需要把它注册到Spring中作为一个Bean。在cn.itcast.hotel中的HotelDemoApplication中声明这个Bean 在cn.itcast.hotel.service.impl中的HotelService中实现search方法 Override public PageResult search(RequestParams params) {try {// 1.准备RequestSearchRequest request new SearchRequest(hotel);// 2.准备DSL// 2.1.queryString key params.getKey();if (key null || .equals(key)) {boolQuery.must(QueryBuilders.matchAllQuery());} else {boolQuery.must(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.遍历ListHotelDoc hotels new ArrayList();for (SearchHit hit : hits) {// 获取文档sourceString json hit.getSourceAsString();// 反序列化HotelDoc hotelDoc JSON.parseObject(json, HotelDoc.class);// 放入集合hotels.add(hotelDoc);}// 4.4.封装返回return new PageResult(total, hotels); }酒店结果过滤 需求添加品牌、城市、星级、价格等过滤功能 修改实体类 修改搜索业务 在HotelService的search方法中只有一个地方需要修改requet.source().query( … )其中的查询条件。 在之前的业务中只有match查询根据关键字搜索现在要添加条件过滤包括 品牌过滤是keyword类型用term查询星级过滤是keyword类型用term查询价格过滤是数值类型用range查询城市过滤是keyword类型用term查询 多个查询条件组合肯定是boolean查询来组合 关键字搜索放到must中参与算分其它过滤条件放到filter中不参与算分 buildBasicQuery的代码如下 private void buildBasicQuery(RequestParams params, SearchRequest request) {// 1.构建BooleanQueryBoolQueryBuilder boolQuery QueryBuilders.boolQuery();// 2.关键字搜索String key params.getKey();if (key null || .equals(key)) {boolQuery.must(QueryBuilders.matchAllQuery());} else {boolQuery.must(QueryBuilders.matchQuery(all, key));}// 3.城市条件if (params.getCity() ! null !params.getCity().equals()) {boolQuery.filter(QueryBuilders.termQuery(city, params.getCity()));}// 4.品牌条件if (params.getBrand() ! null !params.getBrand().equals()) {boolQuery.filter(QueryBuilders.termQuery(brand, params.getBrand()));}// 5.星级条件if (params.getStarName() ! null !params.getStarName().equals()) {boolQuery.filter(QueryBuilders.termQuery(starName, params.getStarName()));}// 6.价格if (params.getMinPrice() ! null params.getMaxPrice() ! null) {boolQuery.filter(QueryBuilders.rangeQuery(price).gte(params.getMinPrice()).lte(params.getMaxPrice()));}// 7.放入sourcerequest.source().query(boolQuery); }我周边的酒店 需求我附近的酒店 我们要做的事情就是基于这个location坐标然后按照距离对周围酒店排序。实现思路如下 修改RequestParams参数接收location字段修改search方法业务逻辑如果location有值添加根据geo_distance排序的功能 修改实体类 添加距离排序 发现确实可以实现对我附近酒店的排序不过并没有看到酒店到底距离我多远这该怎么办 因此我们在结果解析阶段除了解析source部分以外还要得到sort部分也就是排序的距离然后放到响应结果中。 我们要做两件事 修改HotelDoc添加排序距离字段用于页面显示修改HotelService类中的handleResponse方法添加对sort值的获取 酒店竞价排名 需求让指定的酒店在搜索结果中排名置顶 这里的需求是让指定酒店排名靠前。因此我们需要给这些酒店添加一个标记这样在过滤条件中就可以根据这个标记来判断是否要提高算分。 比如我们给酒店添加一个字段isADBoolean类型 true是广告false不是广告 这样function_score包含3个要素就很好确定了 过滤条件判断isAD 是否为true算分函数我们可以用最简单暴力的weight固定加权值加权方式可以用默认的相乘大大提高算分 因此业务的实现步骤包括 给HotelDoc类添加isAD字段Boolean类型挑选几个你喜欢的酒店给它的文档数据添加isAD字段值为true修改search方法添加function score功能给isAD值为true的酒店增加权重 private void buildBasicQuery(RequestParams params, SearchRequest request) {// 1.构建BooleanQueryBoolQueryBuilder 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 !params.getCity().equals()) {boolQuery.filter(QueryBuilders.termQuery(city, params.getCity()));}// 品牌条件if (params.getBrand() ! null !params.getBrand().equals()) {boolQuery.filter(QueryBuilders.termQuery(brand, params.getBrand()));}// 星级条件if (params.getStarName() ! null !params.getStarName().equals()) {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()));}// 2.算分控制FunctionScoreQueryBuilder functionScoreQuery QueryBuilders.functionScoreQuery(// 原始查询相关性算分的查询boolQuery,// 原始查询// function score的数组new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{// 其中的一个function score 元素new FunctionScoreQueryBuilder.FilterFunctionBuilder(// 过滤条件QueryBuilders.termQuery(isAD, true),// 算分函数ScoreFunctionBuilders.weightFactorFunction(10))});request.source().query(functionScoreQuery); }
http://www.zqtcl.cn/news/308500/

相关文章:

  • 合肥佰瑞网站搜索引擎优化步骤
  • 营销型网站建设亏1广西桂林天气预报15天
  • 想做一个网站平台怎么做公司网站建设费用估计
  • 电商网站开发平台pi netwo网页设计文件下载
  • 南平网站设计笔记本怎么建设网站
  • 舆情分析网站免费人工智能培训班收费标准
  • 青岛网站建设 大公司制作相册视频
  • 什么是网站的域名jquery素材网站
  • 课程网站建设ppt模板百度seo推广
  • 网站建设需要用到什么怎么在电脑上用手机app软件
  • 公司做网站有意义么网站认证必须做么
  • 网站虚拟空间更新缓存php外贸网站建设
  • 河南省建设执业资格注册中心网站门户定制网站建设公司
  • 网站开发比较厉害wordpress中文 插件
  • 文化投资的微网站怎么做个人微信公众号如何推广
  • 单位的网站怎样设计才美观网页设计图片的代码
  • 长沙专业做网站排名济南手机网站定制费用
  • 西安专题门户响应式网站建设系统网站有哪些
  • 山东省建设局网站监理员考试asp.net mvc6电商网站开发实践
  • 做网站需要提供什么资料网站备案是什么意思
  • 河南网站建设及推广东莞百度代做网站联系方式
  • 大型企业网站制作浦东新区做网站
  • 简单大气网站源码织梦怎么用框架实现在浏览器的地址栏只显示网站的域名而不显示出文件名
  • 电子商务型网站建设线上推广营销策划
  • 网站建设管理工作情况的通报网站开发vs设计报告
  • 嘉定网站网站建设公司官网制作
  • 做旅游广告在哪个网站做效果好财经网站建设
  • 网站样式下载网站地图定位用什么技术做
  • 自己做网站怎么做的百中搜优化软件
  • 南宁建站平台与网站建设相关的论文题目