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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea 2021.5.1 永久激活码【在线注册码/序列号/破解码】「建议收藏」

    idea 2021.5.1 永久激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    53
  • 哈夫曼实现文件压缩解压缩(c语言)

    哈夫曼实现文件压缩解压缩(c语言)写一个对文件进行压缩和解压缩的程序,功能如下:①可以对纯英文文档实现压缩和解压;②较好的界面程序运行的说明。介绍哈夫曼:效率最高的判别树即为哈夫曼树在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的…

    2022年4月27日
    309
  • 常见的css换行样式[通俗易懂]

    常见的css换行样式[通俗易懂]常见的css换行样式1、内容超出省略号显示h1{width:500px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}2、内容超出换行省略号显示h1{ text-overflow:-o-ellipsis-lastline;overflow:hidden;text-overflow:ellipsis;displa

    2025年7月3日
    4
  • Eclipse SVN 忽略文件或文件夹

    Eclipse SVN 忽略文件或文件夹有时候我们使用svn经常看到一些.project,.classpath文件提示同步,其实这些文件不必管,但是看着有不舒服,我们可以通过eclipse的配置进行忽略。EclipseMars2Window->Preferences->Team->IgnoredResources增加.settings.project.classpath

    2022年10月14日
    4
  • Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果

    Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果大家好,今天给大家带来一个仿360手机卫士悬浮窗效果的教程,在开始之前请允许我说几句不相干的废话。不知不觉我发现自己接触Android已有近三个年头了,期间各种的成长少不了各位高手的帮助,总是有很多高手喜欢把自己的经验写在网上,供大家来学习,我也是从中受惠了很多,在此我深表感谢。可是我发现我却从来没有将自己平时的一些心得拿出来与大家分享,共同学习,太没有奉献精神了。于是我痛定思痛,决定从今天开始写博客,希望可以指点在我后面的开发者,更快地进入Android开发者的行列当中。好了,废话就说这么多,下面开始

    2022年5月8日
    61
  • ext.apply ext.applyIf ext.extend的区别[通俗易懂]

    ext.apply ext.applyIf ext.extend的区别[通俗易懂]Ext.apply、Ext.applyIf和Ext.extend:_sunExt.apply、Ext.applyIf和Ext.extend:2008年07月25日星期五10:48Ext.apply、Ext.applyIf和Ext.extend:Ext.apply(obj,config,[defaults])将config对…

    2022年7月28日
    3

发表回复

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

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