欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

springboot與elasticsearch有什么區(qū)別

本篇文章給大家分享的是有關springboot與elasticsearch有什么區(qū)別,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)專注于固陽網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供固陽營銷型網(wǎng)站建設,固陽網(wǎng)站制作、固陽網(wǎng)頁設計、固陽網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造固陽網(wǎng)絡公司原創(chuàng)品牌,更為您提供固陽網(wǎng)站排名全網(wǎng)營銷落地服務。

核心jar:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>3.0.9</version>
        </dependency>

為什么用這樣的版本,因為springboot相關的es版本就是這樣,為了減少之后無法理解的錯誤出現(xiàn),最好將es版本與es jar的版本保持一致,具體項目怎么創(chuàng)建這里就不說了,像平時一樣,我們首先創(chuàng)建實體層、dao、web:

不需要任何配置,默認集群名稱elasticsearch,地址localhost:9300

@Data
@Document(indexName="person",type="student",shards=5,replicas=1,refreshInterval="-1")
public class Student implements Serializable {
    @Id
    private Long id;

    private String name;

    private String classNo;

    private int age;

    private String sex;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    private String grade;

    private String description;

}

dao:

@Repository
public interface StudentRepository extends ElasticsearchRepository<Student,Long> {

}

web:

@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentRepository studentRepository;

    @GetMapping("/{id}")
    public Student get(@PathVariable("id") Long id){
        Optional<Student> opt = studentRepository.findById(id);
        return opt.orElseGet(null);
    }

    @GetMapping
    public Iterable<Student> getAll(){
        return studentRepository.findAll();
    }

    @PostMapping
    public Student save(Student student){
        return studentRepository.save(student);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable("id") Long id){
        studentRepository.deleteById(id);
    }
    
}

就是這樣簡單。當然是用并非如此,作為數(shù)據(jù)庫主要的還是查詢,根據(jù)上一篇對es的簡單介紹,可以 知道es的查詢有很多種,如何快速查詢出理想的數(shù)據(jù),關鍵還是對api的使用與熟悉。

現(xiàn)在降低一下版本來測試

springboot 1.5.21 elasticsearch-5.6.16

依賴的核心jar:

    <properties>
        <java.version>1.8</java.version>
        <elasticsearch.version>5.6.16</elasticsearch.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--transport client-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <!--rest client-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jna</groupId>
            <artifactId>jna</artifactId>
            <version>3.0.9</version>
        </dependency>
    </dependencies>

首先要知道,連接es有兩種客戶端,一種是基于transport,一種是rest,我們分別看先如何實現(xiàn)(默認情況下transport端口9300,rest 9200,在es中可以修改,如果是集群環(huán)境,且為同一機器,需要配置各個節(jié)點地址)

Transport客戶端

    @Bean
    public TransportClient client() throws UnknownHostException {
        Settings settings = Settings.builder()
                .put("cluster.name",properties.getClusterName())
                .build();

        List<String> nodes = properties.getNodes();
        List<TransportAddress> addresses = new ArrayList<>();

        for(String node : nodes){
            String[] addr = node.split(":");
            TransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(addr[0]),Integer.valueOf(addr[1]));
            addresses.add(address);
        }

        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddresses(addresses.toArray(new TransportAddress[addresses.size()]));
        return client;
    }

其余就是如何調用這個TransportClient,創(chuàng)建index:

    private CreateIndexRequestBuilder configIndex(String index){
        if(StringUtils.isEmpty(index)){
            log.warn("index name can't be empty");
            return null;
        }
        Map<String,Object> config = new HashMap<>();
        if(properties.getProperties()!=null){
            config.putAll(properties.getProperties());
        }
        Settings settings = Settings.builder()
                .put(config)
                .build();
        return client.admin().indices().prepareCreate(index.toLowerCase())
                .setSettings(settings);
    }

    public void createIndex(String index,String type,XContentBuilder source){
        CreateIndexRequestBuilder indexBuilder = configIndex(index);
        if(indexBuilder!=null){
//            indexBuilder.setSettings()
            if(!StringUtils.isEmpty(type)){
                indexBuilder.addMapping(type,  source);
            }
            CreateIndexResponse response = indexBuilder.execute().actionGet();
            boolean ack = response.isAcknowledged();
            if(ack){
                log.info("index [{}] create successfully!",index);
            }else{
                log.warn("index [{}] create unsuccessfully!",index);
            }
        }
    }

創(chuàng)建索引可以不需要type和document屬性,當然,如果需要創(chuàng)建index、type,記得構建的是一個完整的json,類似這樣:

{
  "settings":{
    "number_of_shards":5,
    "number_of_replicas":1
  },
  "mappings":{
    "type1":{
      "properties":{
        "prop1":{"type":"text"...}
        .....
      }
    }
    .....
  }
}

刪除索引:

    public boolean deleteIndex(String... index) {
        return client.admin().indices().prepareDelete(index).execute().actionGet().isAcknowledged();
    }

保存文檔:

    public void saveDoc(String index, String type,String id, String source){
        if(StringUtils.isEmpty(id)){
            log.warn("id is empty,and generate id automatically.");
            id = UUID.randomUUID().toString();
        }
        IndexResponse response = client.prepareIndex(index, type, id).setSource(source,XContentType.JSON).get();
        log.debug("save date status:[{}]",response.status().getStatus());
    }

修改文檔:

    public void updateDoc(String index, String type, String id,String source){
        UpdateResponse response = client.prepareUpdate(index, type, id).setDoc(source,XContentType.JSON).get();
        log.debug("update date status:[{}]",response.status().getStatus());
    }

刪除文檔:

    public void deleteDoc(String index, String type, String id){
        client.prepareDelete(index,type,id).execute().actionGet();
    }

查詢:

    public List<Map<String, Object>> query(String index, String type,QueryBuilder query){
        SearchRequestBuilder builder = client.prepareSearch();
        if(!StringUtils.isEmpty(index)){
            builder.setIndices(index);
        }
        if(!StringUtils.isEmpty(type)){
            builder.setTypes(type);
        }
        SearchResponse response = builder.setQuery(query).get();
        SearchHits hits = response.getHits();
//        long total = hits.totalHits;
        Iterator<SearchHit> hitIt = hits.iterator();
        List<Map<String,Object>> result = new ArrayList<>();
        while (hitIt.hasNext()){
            SearchHit hit = hitIt.next();
            result.add(hit.getSourceAsMap());
        }
        return result;
    }

Rest客戶端

    @Bean
    public RestClient client(){
        List<String> nodes = properties.getNodes();
        List<HttpHost> hosts = null;
        if(nodes!=null){
            hosts = nodes.stream().map(e -> {
                // match?
                String[] addr = e.split(":");
                return new HttpHost(addr[0], Integer.valueOf(addr[1]));
            }).collect(Collectors.toList());
        }

        RestClientBuilder restClientBuilder;
        if(hosts != null){
            restClientBuilder = RestClient.builder(hosts.toArray(new HttpHost[hosts.size()]));
        }else{
            log.warn(" no host is configured,user default {}:{} ",DEFAULT_HOST,DEFAULT_PORT);
            restClientBuilder = RestClient.builder(new HttpHost(DEFAULT_HOST,DEFAULT_PORT));
        }
//        httpConfigure(restClientBuilder);
        return restClientBuilder.build();
    }

這個和es原生的調用一樣,當然還有一個異步的方法

client.performRequest(String method, String url, Map<String, String> params, HttpEntity entity, HttpAsyncResponseConsumerFactory consumerFactory);

關鍵是構建HttpEntiy,因為es主要是通過json格式的數(shù)據(jù)進行通信,所以關鍵就是如何構建json格式的數(shù)據(jù)進行傳遞,當然我們可以借助一些json工具來完成:

        public static String builder(){
            Map<String,Object> json = new HashMap<>();
            Map<String,Object> match_all = new HashMap<>();
            match_all.put("match_all", Collections.EMPTY_MAP);
            json.put("query",match_all);
            try {
                return new ObjectMapper().writeValueAsString(json);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return null;
        }

以上就是springboot與elasticsearch有什么區(qū)別,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標題:springboot與elasticsearch有什么區(qū)別
URL地址:http://aaarwkj.com/article36/pcsosg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化手機網(wǎng)站建設、動態(tài)網(wǎng)站、定制開發(fā)、微信公眾號、網(wǎng)站設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設
成人一区二区三区乱码| 国产精品熟女在线视频| 欧美日韩一级一区二区三区| 免费在线一区二区av| 色婷婷激一区二区三区| 日韩欧美国产精品专区| 国产日产精品一区二区三区四区| 91九色在线精品一区| 日本欧美高清一区二区| 国产亚洲综合区成人国产| 四虎在线观看最新入口| 99久久精彩免费视频| 午夜在线观看欧美福利| 国产伦精品二区三区视频| 女同一区二区三区在线| 亚洲欧美日韩另类自拍| 国内精品人妻久久毛片| 99精品亚洲一区二区| 中文岳妇荡欲丰满肥熟| 日韩有码大片最新自拍| 免费看真人性生活视频| 最新欧美精品一区二区| 18禁免费无遮挡免费视频| 日韩在线一区二区视频| 精品综合亚洲中文字幕| 国产精品国产三级国产不产一地| 欧美一日韩一级片免费看| 日韩无码一区二区视频| 亚洲成人免费在线播放| 国产亚洲综合一区二区三区| 国产精品一区在线免费看| 日韩新片免费专区在线| 黄片视频免费在线播放大全| 日本道视频一区二区三区| 亚洲av色网在线观看| 日本99精品视频10| 亚洲一区二区三区在线播| 男女搞j视频网站免费观看| 久久精品亚洲天然东京热| 日韩中文字幕一区二区不卡| 五月激情开心久久婷婷|