天天看點

elasticsearch 資料類型_Elasticsearch的基本使用

前期我們已經介紹了Es的安裝,本期将介紹Es的基本概念,與spring boot的整合使用。 簡介 Elasticsearch是基于Lucene的全文檢索庫,本質也是存儲資料,很多概念與MySQL類似。對比關系如下:

索引(indices)--------------------------------Databases 資料庫  類型(type)-----------------------------Table 資料表    文檔(Document)----------------Row 行      字段(Field)-------------------Columns 列 
           

Elasticsearch中支援的資料類型非常豐富:

elasticsearch 資料類型_Elasticsearch的基本使用

幾個關鍵常用的:

  • String類型,又分兩種:
    • text:可分詞,不可參與聚合
    • keyword:不可分詞,資料會作為完整字段進行比對,可以參與聚合
  • Numerical:數值類型,分兩類
    • 需要指定一個精度因子,比如10或100。elasticsearch會把真實值乘以這個因子後存儲,取出時再還原。
    • 基本資料類型:long、interger、short、byte、double、float、half_float
    • 浮點數的高精度類型:scaled_float
  • Date:日期類型

    elasticsearch可以對日期格式化為字元串存儲,但是建議我們存儲為毫秒值,存儲為long,節省空間。

Elasticsearch叢集相關概念:

  • 索引集(Indices,index的複數):邏輯上的完整索引 collection1
  • 分片(shard):資料拆分後的各個部分
  • 副本(replica):每個分片的複制

要注意的是:Elasticsearch本身就是分布式的,是以即便你隻有一個節點,Elasticsearch預設也會對你的資料進行分片和副本操作,當你向叢集添加新資料時,資料也會在新加入的節點中進行平衡。

Es的增删改查

使用kibana的控制台操作,可以對http請求進行簡化 1. 建立索引和映射關系

PUT /索引庫名/_mapping/類型名稱{  "properties": {    "字段名": {      "type": "類型",      "index": true,      "store": true,      "analyzer": "分詞器"    }  }}
           
  • 類型名稱:就是前面type的概念,類似于資料庫中的不同表字段名:任意填寫,可以指定許多屬性,例如:
  • type:類型,可以是text、long、short、date、integer、object等
  • index:是否索引,預設為true
  • store:是否存儲,預設為false
  • analyzer:分詞器,這裡的ik_max_word即使用ik分詞器

demo:

elasticsearch 資料類型_Elasticsearch的基本使用

檢視映射關系

GET /索引庫名/_mapping
           

2.新增資料

POST /索引庫名/類型名/id值      ##id值可以自己指定,也可以由es自動生成{    "key":"value"}
           

demo:

elasticsearch 資料類型_Elasticsearch的基本使用

檢視剛剛插入的資料:

get _search{    "query":{        "match_all":{}    }}
           

3.修改資料    把剛才新增的請求方式改為PUT,就是修改了。不過修改必須指定id

  • id對應文檔存在,則修改
  • id對應文檔不存在,則新增
PUT /majiang/user/1{    "name":"diku",    "age":19,    "images":"http://image.majiang.com/diku.jpg"}
           

4.删除資料

DELETE /索引庫名/類型名/id值
           
elasticsearch 資料類型_Elasticsearch的基本使用

5.查詢資料

    5.1查詢所有

GET /majiang/_search{    "query":{  //查詢對象        "match_all": {}   //代表查詢所有    }}
           

    5.2比對查詢

GET /majiang/_search{    "query":{        "match":{            "age":19        }    }}
           

        結果:

elasticsearch 資料類型_Elasticsearch的基本使用
  • 更多相關進階的操作體驗請上官方開發文檔https://www.elastic.co/guide/index.html

與Springboot的整合

1.添加pom依賴

<dependency>    <groupId>org.springframework.bootgroupId>    <artifactId>spring-boot-starter-webartifactId> dependency><dependency>    <groupId>org.springframework.bootgroupId>    <artifactId>spring-boot-starter-data-elasticsearchartifactId>dependency><dependency>    <groupId>org.projectlombokgroupId>    <artifactId>lombokartifactId>    <optional>trueoptional>dependency><dependency>    <groupId>org.springframework.bootgroupId>    <artifactId>spring-boot-starter-testartifactId>dependency>
           

2.配置application.yml檔案

server:  port: 8080spring:  data:    elasticsearch:      cluster-name: elasticsearch      cluster-nodes: 192.168.9.120:9300
           

3.建立啟動器

@SpringBootApplicationpublic class EsApp {    public static void main(String[] args) {        SpringApplication.run(EsApp.class,args);    }}
           

4.建立實體類User

@Data@Document(indexName = "majiang" ,type="user")public class User {    private String id;    private String name;    private int age;    private String images;    public User() {    }    public User(String id, String name, int age, String images) {        this.id = id;        this.name = name;        this.age = age;        this.images = images;    }}
           

5.建立EsRepository

@Repositorypublic interface EsRepository extends ElasticsearchRepository<User,String> {}
           

為了簡化操作就沒有建立controller、serviceImpl等,通過@SpringBootTest進行示範操作。

6.UserService具體操作

通過ElasticsearchTemplate 和ElasticsearchRepository 來操作。

@RunWith(SpringRunner.class)@SpringBootTestpublic class UserService {    private static final Logger log = LoggerFactory.getLogger(UserService.class);    @Autowired    private ElasticsearchTemplate elasticsearchTemplate;    @Autowired    private EsRepository esRepository;    /**     * 查詢所有     */    @Test    public void getAll() {        esRepository.findAll().forEach(a -> {            log.info(String.valueOf(a));        });        //使用elasticsearchTemplate 構造NativeSearchQueryBuilder對象        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(null).build();        List users = elasticsearchTemplate.queryForList(searchQuery, User.class);        users.forEach(user -> {                    log.info(user.toString());                }        );    }    /**     * 通過id查詢     */    @Test    public void findById() {        log.info(String.valueOf(esRepository.findById("1")));    }    /**     * 新增     */    @Test    public void insUser() {        esRepository.save(new User("6", "cccc", 26, "http://image.majiang.com/cccc.jpg"));        //使用elasticsearchTemplate 構造IndexQuery對象        User cccc = new User("8", "oooo", 29, "http://image.majiang.com/oooo.jpg");        IndexQuery indexQuery = new IndexQueryBuilder().withObject(cccc).build();        elasticsearchTemplate.index(indexQuery);    }    /**     * 修改     */    @Test    public void updUser() {        esRepository.save(new User("6", "cccc", 29, "http://image.majiang.com/cccc.jpg"));    }    /**     * 删除     */    @Test    public void delUser() {        esRepository.deleteById("6");    }}
           

查詢所有getAll()的執行結果

elasticsearch 資料類型_Elasticsearch的基本使用

總結

本篇簡單介紹了Elasticsearch的基本操作,Spring boot整合Es的兩種方式ElasticsearchTemplate,ElasticsearchRepository。

繼續閱讀