OpenSearch 简单学习

OpenSearch 简单学习OpenSearch 简单学习项目中用到了阿里云的开放搜索 进行一下总结 OpenSearch 基于阿里巴巴自主研发的大规模分布式搜索引擎平台 该平台承载了阿里巴巴全部主要搜索业务 包括淘宝 天猫 一淘 1688 ICBU 神马搜索等业务 OpenSearch 以平台服务化的形式 将专业搜索技术简单化 低门槛化和低成本化 让搜索引擎技术不再成为客户的业务瓶颈 以低成本实现产品搜索功能并快速迭代

这里写图片描述
注意里面的索引,现在index 里包含了两个字段,也就是说会从这两个字段里面找到匹配的内容。
分词方式选择了默认的中文基础分词。
这里写图片描述
创建完成
这里写图片描述
之后激活就可以了,我选择的是最低配置,这个配置现在是处于免费里面的。
接下来就是要上传数据了
这里我选择通过文件上传,当然这只是测试的时候比较实用,正常大量数据的话需要SDK上传。
这是我的测试数据,json格式传送。








 [ { "fields": { "test_id": 1, "test_name": "香蕉 ", "test_content": " 很好吃,深受女性喜爱的功效。" }, "cmd": "ADD" }, { "fields": { "test_id": 2, "test_name": "苹果", "test_content": " 可以减肥,适合需要减轻体重的人" }, "cmd": "ADD" }, { "fields": { "test_id": 3, "test_name": "葡萄", "test_content": "被称为黑珍珠,自古昏君最喜欢吃" }, "cmd": "ADD" }, { "fields": { "test_id": 4, "test_name": "梨 ", "test_content": "适合糖尿病人的水果" }, "cmd": "ADD" }, { "fields": { "test_id": 5, "test_name": "西瓜", "test_content": "夏天解暑神器" }, "cmd": "ADD" } ]

在配置好,搜索结果以后我们可以看到在搜索结构中查看。

import com.alibaba.fastjson.JSON; import com.aliyun.opensearch.CloudsearchClient; import com.aliyun.opensearch.CloudsearchSearch; import com.aliyun.opensearch.object.KeyTypeEnum;
CloudsearchClient client;//客户 public SearchResultJson search(String json) { logger.info("--------------------openSearch搜索商品开始----------------------------"); SearchResultJson searchResultJson = new SearchResultJson(); int total = 0; //创建客户端 try { this.client = new CloudsearchClient(accesskey, secret , host, opts, KeyTypeEnum.ALIYUN); } catch (UnknownHostException e1) { e1.printStackTrace(); } Map<String, Object> data = new HashMap<String, Object>(); data = JSON.parseObject(json, Map.class); CloudsearchSearch search = new CloudsearchSearch(client); // 添加指定搜索的应用: search.addIndex(appName); // 指定搜索返回的格式。 search.setFormat("json"); if(data != null){ if(data.get("priceSort") != null && data.get("priceSort").equals("1")){//价格升序 // 设定排序方式 + 表示正序 - 表示降序 search.addSort("price", "+"); }else if(data.get("priceSort") != null && data.get("priceSort").equals("0")){//价格降序 search.addSort("price", "-"); } if(data.get("saleNum") != null && data.get("saleNum").equals("1")){//销量升序 search.addSort("soldnum", "+"); }else if(data.get("saleNum") != null && data.get("saleNum").equals("0")){//销量降序 search.addSort("soldnum", "-"); } if(data.get("keyword") != null && !"".equals(data.get("keyword").toString().trim())){//关键词 String keyword = data.get("keyword").toString().trim(); String tempKeyword = keyword.replaceAll("\\s{1,}", " "); String[] keywords = tempKeyword.split(" "); List<String> keywordList = new ArrayList<String>(); for(int i = 0; i < keywords.length; i++){ 
    if(keywordList.contains(keywords[i])) continue; else keywordList.add(keywords[i]); } keywords = keywordList.toArray(new String[keywordList.size()]); StringBuilder text = new StringBuilder(); for(int i = 0; i < keywords.length; i++){ 
    text.append("default:").append("'").append(keywords[i]).append("'").append(" AND "); } if(text.length()>0){ search.setQueryString("default:" + text.toString().substring(0, text.toString().lastIndexOf(" AND"))); }else{ search.setQueryString("default:" + text.toString()); } search.setQueryString("default:'" + tempKeyword + "'"); } if(data.get("lowPrice") != null && !"".equals(data.get("lowPrice").toString().trim())){//开始价格 search.addFilter("price>="+data.get("lowPrice")); } if(data.get("propertyStr") != null && !"".equals(data.get("propertyStr").toString().trim())){//开始价格 String propertyStr = (String) data.get("propertyStr"); String[] propertyArr = null; if(propertyStr.contains(",")){ propertyArr = propertyStr.split(","); for(int i = 0; i < propertyArr.length; i++){ 
    StringBuilder text = new StringBuilder(); text.append('"').append(propertyArr[i]).append('"'); search.addFilter("property="+text.toString()); } }else{ StringBuilder text = new StringBuilder(); text.append('"').append(data.get("propertyStr")).append('"'); search.addFilter("property="+text.toString()); } } if(data.get("hignPrice") != null && !"".equals(data.get("hignPrice").toString().trim())){//结束价格 search.addFilter("price<="+data.get("hignPrice")); } if(data.get("pageIndex") != null && !"".equals(data.get("pageIndex").toString().trim())){//页码 search.setStartHit(((int)data.get("pageIndex")-1) * 10); } if(data.get("supplierId") != null && !"".equals(data.get("supplierId").toString().trim())){//页码 search.addFilter("supplierid="+data.get("supplierId").toString().trim()); } if(data.get("flag") != null && !"".equals(data.get("flag").toString().trim())){//页码 if(data.get("flag").equals(BY_SUPPLIER)){ search.addAggregate("listname2", "count()"); }else if(data.get("flag").equals(BY_COMMON)){ search.addAggregate("property", "count()"); } } search.setHits(10); try { Map<String, Object> tempResult = JSON.parseObject(search.search(),Map.class); Map<String, Object> middleTempResult = (Map<String, Object>) tempResult.get("result"); total = (int) middleTempResult.get("total");//总数 //-----------------查询商品结果------------------- List<Map<String, Object>> result = (List<Map<String, Object>>) middleTempResult.get("items"); logger.info("\n搜索商品列表结果:" + result +"\n"); List<Product> products = new ArrayList<Product>(); for(Map<String, Object> object : result){ Product product = new Product(); String prodId = (String)object.get("prodid"); if(!StringUtils.isEmpty(prodId)){ product.setProdId(Long.parseLong(prodId)); } product.setName((String)object.get("name")); product.setCode((String)object.get("code")); String price = (String)object.get("price"); if(!StringUtils.isEmpty(price)){ product.setPrice(new BigDecimal(price)); } product.setDescription((String)object.get("description")); product.setSupplierName((String)object.get("suppliername")); product.setMainProdPicUrl((String)object.get("mainprodpicurl")); String skuCount = (String)object.get("skucount"); product.setSkuCount(Integer.parseInt(skuCount)); product.setPropertyStr((String)object.get("propertystr")); products.add(product); } //--------------------查询分类------------- List<Map<String, Object>> facet = (List<Map<String, Object>>) middleTempResult.get("facet");//分类结果 logger.info("\n搜索商品分类列表:" + facet +"\n"); List<Property> propertyList= new ArrayList<Property>(); if(data.get("flag") != null && !"".equals(data.get("flag").toString().trim())){//页码 if(data.get("flag").equals(BY_SUPPLIER)){ for(Map<String, Object> property : facet){ List<Map<String, Object>> properties = (List<Map<String, Object>>) property.get("items"); for(Map<String, Object> prop : properties){ String facetValue = (String) prop.get("value"); Long count = Long.parseLong((String) prop.get("count")); Property propTemp = new Property(); propTemp.setName(facetValue); propTemp.setCount(count); propertyList.add(propTemp); } } }else if(data.get("flag").equals(BY_COMMON)){ for(Map<String, Object> property : facet){ List<Map<String, Object>> properties = (List<Map<String, Object>>) property.get("items"); for(Map<String, Object> prop : properties){ String facetValue = (String) prop.get("value"); Long count = Long.parseLong((String) prop.get("count")); Property propTemp = new Property(); propTemp.setName(facetValue.substring(0, facetValue.indexOf(":"))); propTemp.setValue(facetValue.substring(facetValue.indexOf(":")+1)); propTemp.setCount(count); propertyList.add(propTemp); } } } } searchResultJson.setProducts(products); searchResultJson.setProperties(propertyList); searchResultJson.setTotal(total); } catch (ClientProtocolException e) { logger.error("OpenSearch客户端协议异常!", e); throw new PurchaseException(OperCodeDefine.OPEN_SEARCH_CLIENT_PROTOCOL_EXCEPTION, OperCodeDefine.OPEN_SEARCH_CLIENT_PROTOCOL_EXCEPTION_NAME); } catch (UnknownHostException e) { logger.error("创建OpenSearch客户端时发生异常:未知主机异常!", e); throw new PurchaseException(OperCodeDefine.OPEN_SEARCH_UNKNOWN_HOST_EXCEPTION, OperCodeDefine.OPEN_SEARCH_UNKNOWN_HOST_EXCEPTION_NAME); } catch (IOException e) { logger.error("OpenSearch上传文档IO操作异常!", e); throw new PurchaseException(OperCodeDefine.OPEN_SEARCH_IO_ERROR, OperCodeDefine.OPEN_SEARCH_IO_ERROR_NAME); } } return searchResultJson; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233615.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 走近webpack(2)–css打包及压缩js

    前面的文章介绍了webpack的devServer以及多入口多出口文件的配置,咱们继续往下学。在开始学习接下来的知识之前,我们先回顾一下,前文提到了webpack的简单配置方法,但是只详细说了下入口

    2022年3月25日
    39
  • php源码 网页聊天_php即时在线网页聊天源码-响应式设计自适应手机端[通俗易懂]

    php源码 网页聊天_php即时在线网页聊天源码-响应式设计自适应手机端[通俗易懂]基于PHPWebSocket即时通讯开发的在线聊天源码,使用高效优雅的Laravel框架进行非通讯部分开发。前台与后台自适应PC与移动端,支持一对多交流,可以自由创建新的房间与解散创建的房间,集成签到功能,等级功能,房间创建者可以对用户进行禁言、拉黑处理,房间可以由房间创建者自由设置进入密码,房间内支持常规的文字消息、表情、支持自定义图片消息、图片可用本地或者图片外链。php环境配置需求P…

    2022年5月15日
    38
  • java hashMap 查询效率非常高,看一下根据key找value,根据value找key

    java hashMap 查询效率非常高,看一下根据key找value,根据value找key@TestpublicvoidtestMap(){Map map=newHashMap();//step1加密字符键字母charc=’a’;for(inti=2;iintk=(i==7||i==9)?4:3;for(intj=1;jStringvalue=””+i+j;map.put(c,value);c++;}}/

    2022年7月23日
    6
  • PyCharm 2022.01.13永久激活[最新免费获取]

    (PyCharm 2022.01.13永久激活)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1…

    2022年3月31日
    113
  • matlab解析int8数据为double_matlab把double转成int

    matlab解析int8数据为double_matlab把double转成int最近写matlab又遇到一个坑,感觉是匪夷所思的bug,简直刷新我的人生观、世界观和价值观【手动笑哭】想解决的问题很简单,我就是想求一张图片中所有像素点的R、G、B三个颜色分量的平均值,然后我发现,每个颜色分量的和永远是255,这怎么可能啊,和肯定会很大啊,各种调试,调到我质疑人生。后来在Workspace中看了几眼,看到图片存储是以unit8数值类型存储的,成功引起了我的注意,以前真是没…

    2022年9月17日
    0
  • QListWidget的QSS用法「建议收藏」

    QListWidget的QSS用法「建议收藏」本文完全是转载如下网址博客内容,如有侵权,请及时通知,博主会删除。原文地址:https://blog.csdn.net/u011125673/article/details/51753997QListWidget和QTableWidget的使用和属性,QTableWidget和QListWidget样式表的设置,滚动条的样式设置一、QListWidget的使用//一、QListWidgetli…

    2022年6月5日
    312

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号