博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch部分四--Mapping
阅读量:6331 次
发布时间:2019-06-22

本文共 2408 字,大约阅读时间需要 8 分钟。

hot3.png

相當于數據庫的表結構的定義,elasticsearch的mapping 也很重要。直接關系到性能及搜索結果的准確性。elasticsearch的java api的例子太少,我在這兒就獻醜了。

爲了說明mapping的定義,我這裏定義了一個簡單的模型,就ID,type,和catIds 3個屬性,重在說明如何使用java api來定義mapping,具體各field應該如何定義,這裏不做討論。
Java代碼  收藏代碼
public class TestModel implements Serializable {  
    private static final long serialVersionUID = 3174577828007649745L;  
    //主ID  
    private long id;  
    //類型,爲types之一  
    private String type;  
    /** 
     * 這裏是一個列表 
     */  
    private List<Integer> catIds;  
      
      
    public long getId() {  
        return id;  
    }  
    public void setId(long id) {  
        this.id = id;  
    }  
    public String getType() {  
        return type;  
    }  
    public void setType(String type) {  
        this.type = type;  
    }  
    public List<Integer> getCatIds() {  
        return catIds;  
    }  
    public void setCatIds(List<Integer> catIds) {  
        this.catIds = catIds;  
    }  
}  
 我們假設id就存儲爲long類型,type存儲爲字符串類型,catIds爲一個列表,其實際類型爲integer類型。定義的mapping如下:
Java代碼  收藏代碼
/** 
     * mapping 一旦定義,之後就不能修改。 
     * @return 
     * Exception 
     */  
    private static XContentBuilder getMapping() throws Exception{  
        XContentBuilder mapping = jsonBuilder()    
                   .startObject()    
                     .startObject("test")    
                     .startObject("properties")           
                       .startObject("id")  
                            .field("type", "long")  
                            .field("store", "yes")  
                        .endObject()      
                          
                       .startObject("type")  
                            .field("type", "string")  
                            .field("index", "not_analyzed")  
                        .endObject()    
                          
                       .startObject("catIds")  
                            .field("type", "integer")  
                       .endObject()    
                     .endObject()    
                    .endObject()    
                  .endObject();    
        return mapping;  
    }  
 注意:elasticsearch的field一旦定義後就無法修改,你想增加一個store屬性,都不行。
 
下面就是調用JAVA API了,注意,在定義mapping之前,還需要先創建一個index庫。這裏,我index庫和mapping 寫到一個方法裏面了。
Java代碼  收藏代碼
Client client = ESUtils.getClient();  
        //首先創建索引庫  
        CreateIndexResponse  indexresponse = client.admin().indices()  
        //這個索引庫的名稱還必須不包含大寫字母  
        .prepareCreate("testindex").execute().actionGet();  
        System.out.println(indexresponse.acknowledged());;  
        //如果是在兩台機器上,下面直接putMapping可能會報異常  
        PutMappingRequestBuilder builder = client.admin().indices().preparePutMapping("testindex");  
        //testType就像當于數據的table  
        builder.setType("testType");  
        XContentBuilder mapping = getMapping();  
        builder.setSource(mapping);  
        PutMappingResponse  response = builder.execute().actionGet();  
        System.out.println(response.isAcknowledged());  
 其中,這個代碼在我本機出現一點問題,當我創建完index後,直接創建mapping 的時候,報index missing。我把兩個es Node停掉一個就沒有問題了。可見,ES將create index和putMapping放到了兩個不同的es Node下面,導致了上面那個異常。
 
好了,有時爲了測試,可能需要刪除某個索引,代碼如下:
Java代碼  收藏代碼
Client client = ESUtils.getClient();  
        client.admin().indices()  
        //這個索引庫的名稱還必須不包含大寫字母  
        .prepareDelete("testindex").execute().actionGet();  

转载于:https://my.oschina.net/u/2450896/blog/544447

你可能感兴趣的文章
有理想的程序员必须知道的15件事
查看>>
用于测试的字符串
查看>>
财付通和支付宝资料收集
查看>>
PHPCMS V9数据库表结构分析
查看>>
『原创』+『参考』基于PPC的图像对比程序——使用直方图度量
查看>>
理解 IEnumerable 与 IEnumerator
查看>>
NHibernate 2.0 Beta 1 Released和一些工具
查看>>
【每天一个Linux命令】12. Linux中which命令的用法
查看>>
软件接口数据一致性机制
查看>>
微服务架构介绍和RPC框架对比
查看>>
Debian下使用OpenLDAP 管理端
查看>>
泛型排序器TComparer
查看>>
9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
查看>>
创建符合标准的、有语意的HTML页面——ASP.NET 2.0 CSS Friendly Control Adapters 1.0发布...
查看>>
Adobe驳斥Flash过度耗电论 称HTML5更耗电
查看>>
No!No!No! It's not fashion!
查看>>
艰困之道中学到的经验教训
查看>>
互联网生态建设落地五大挑战——保险科技生态建设 ...
查看>>
进行短视频app开发工作时,可以加入它来保护青少年 ...
查看>>
25G DAC无源高速线缆和25G光模块之间的区别
查看>>