日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java与ElasticSerach的整合

發布時間:2024/10/6 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java与ElasticSerach的整合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 通過es的mapping數據結構

    • 定義數據庫中的表的結構的定義,通過mapping來控制索引存儲數據的設置
      • 定義Index下的字段名(Field Name)

      • 定義字段的類型,比如數值型、字符串型、布爾型等

      • 定義倒排索引相關的配置,比如documentId、記錄position、打分等

    • 數據類型
核心數據類型 字符串型:text、keyword 數值型:long、integer、shortbytedoublefloat、half_float、scaled_float 日期類型:date 布爾類型:boolean 二進制類型:binary 范圍類型:integer_range、float_range、long_range、double_range、date_range復雜數據類型 數組類型:array 對象類型:object 嵌套類型:nested object ?地理位置數據類型 geo_point()geo_shape(形狀)專用類型 記錄IP地址ip 實現自動補全completion 記錄分詞數:token_count 記錄字符串hash值母乳murmur3多字段特性multi-fields 允許對同一個字段采用不同的配置,比如分詞,例如對人名實現拼音搜索, 只需要在人名中新增一個子字段為pinyin即可
  • 創建mapping
PUT gmall0105 {"mappings": {"PmsSkuInfo":{"properties": {"id":{"type": "keyword","index": true},"skuName":{"type": "text", "analyzer": "ik_max_word"},"skuDesc":{"type": "text", "analyzer": "ik_smart"},"catalog3Id":{"type": "keyword"},"price":{"type": "double"},"skuDefaultImg":{"type": "keyword", "index": false},"hostScore":{"type": "double"},"productId":{"type": "keyword"},"skuAttrValueList":{"properties": {"attrId":{"type":"keyword"},"valueId":{"type":"keyword"}}}}}} }

Java與ElasticSerach的整合

  • 導入Java與ElasticSerach的依賴
  • <!--es的Java客服端--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- https://mvnrepository.com/artifact/io.searchbox/jest --><dependency><groupId>io.searchbox</groupId><artifactId>jest</artifactId><version>5.3.3</version></dependency><!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>4.5.1</version></dependency>

    2.PmsSearchSkuInf與ElasticSearch中的數據結構對應

    public class PmsSearchSkuInfo implements Serializable{@Idprivate String id;private String skuName;private String skuDesc;private String catalog3Id;private BigDecimal price;private String skuDefaultImg;private double hostScore;private String productId;private List<PmsSkuAttrValue> skuAttrValueList;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSkuName() {return skuName;}public void setSkuName(String skuName) {this.skuName = skuName;}public String getSkuDesc() {return skuDesc;}public void setSkuDesc(String skuDesc) {this.skuDesc = skuDesc;}public String getCatalog3Id() {return catalog3Id;}public void setCatalog3Id(String catalog3Id) {this.catalog3Id = catalog3Id;}public BigDecimal getPrice() {return price;}public void setPrice(BigDecimal price) {this.price = price;}public String getSkuDefaultImg() {return skuDefaultImg;}public void setSkuDefaultImg(String skuDefaultImg) {this.skuDefaultImg = skuDefaultImg;}public double getHostScore() {return hostScore;}public void setHostScore(double hostScore) {this.hostScore = hostScore;}public String getProductId() {return productId;}public void setProductId(String productId) {this.productId = productId;}public List<PmsSkuAttrValue> getSkuAttrValueList() {return skuAttrValueList;}public void setSkuAttrValueList(List<PmsSkuAttrValue> skuAttrValueList) {this.skuAttrValueList = skuAttrValueList;} }

    3.SkuService.java

    public interface SkuService {List<PmsSkuInfo> getAllSku(); }

    4.PmsSkuInfoMapper實現mybatis的tk.Mapper

    public interface PmsSkuInfoMapper extends Mapper<PmsSkuInfo>{ }

    5.SkuServiceImpl.java

    @Service public class SkuServiceImpl implements SkuService{@AutowiredPmsSkuInfoMapper pmsSkuInfoMapper;@Overridepublic List<PmsSkuInfo> getAllSku() {List<PmsSkuInfo> pmsSkuInfos = pmsSkuInfoMapper.selectAll();for (PmsSkuInfo pmsSkuInfo : pmsSkuInfos) {String skuId = pmsSkuInfo.getId();PmsSkuAttrValue pmsSkuAttrValue=new PmsSkuAttrValue();pmsSkuAttrValue.setSkuId(skuId);List<PmsSkuAttrValue> pmsSkuAttrValues = pmsSkuAttrValueMapper.select(pmsSkuAttrValue);pmsSkuInfo.setSkuAttrValueList(pmsSkuAttrValues);}return pmsSkuInfos;} }

    6.GmallSearchServiceApplication

    public class GmallSearchServiceApplication {@ReferenceSkuService skuService; //查詢MySQL@AutowiredJestClient jestClient;@Testpublic void contextLoads() throws IOException {//查詢MySQL數據庫List<PmsSkuInfo> pmsSkuInfoList=new ArrayList<>();pmsSkuInfoList=skuService.getAllSku();//轉化為es的數據結構List<PmsSearchSkuInfo> pmsSearchSkuInfoList=new ArrayList<>();for (PmsSkuInfo pmsSkuInfo : pmsSkuInfoList) {PmsSearchSkuInfo pmsSearchSkuInfo = new PmsSearchSkuInfo();BeanUtils.copyProperties(pmsSkuInfo,pmsSearchSkuInfo);pmsSearchSkuInfoList.add(pmsSearchSkuInfo);}//導入esfor (PmsSearchSkuInfo pmsSearchSkuInfo : pmsSearchSkuInfoList) {Index put = new Index.Builder(pmsSearchSkuInfo).index("gmall0105").type("PmsSkuInfo").id(pmsSearchSkuInfo.getId()).build();jestClient.execute(put);}}}

    7.在elastaicSearch中查詢

    //先過濾后查詢一個條件中交集 GET gmall0105/PmsSkuInfo/_search {"query": {"bool": {"filter":[{"term": {"skuAttrValueList.valueId": "39"}}, {"term": {"skuAttrValueList.valueId": "43"}}], "must": [{"match": {"skuName": "Apple"}}]}} }

    ElasticSearch并集與交集查詢

    //并集是一個數組 {terms:{"skuAttrValueList.valueId":["39","40","41"]}} //交際是一個具體值 {term:{"skuArrtValueList.valueId":"39"}}


    查詢API

    //jest的工具SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();//boolBoolQueryBuilder boolQueryBuilder=new BoolQueryBuilder();//filterTermQueryBuilder termQueryBuilder=new TermQueryBuilder("skuAttrValueList.valueId","39");boolQueryBuilder.filter(termQueryBuilder);//mustMatchQueryBuilder matchQueryBuilder=new MatchQueryBuilder("skuName","Apple");boolQueryBuilder.must(matchQueryBuilder);//querysearchSourceBuilder.query(boolQueryBuilder);//fromsearchSourceBuilder.from(0);//sizesearchSourceBuilder.size(20);//hightlightersearchSourceBuilder.highlighter();String delStr=searchSourceBuilder.toString(); Search search = new Search.Builder("dsl的json語句").addIndex("gmall0105").addType("PmsSkuInfo").build();

    總結

    以上是生活随笔為你收集整理的Java与ElasticSerach的整合的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。