elasticsearch基础

1、docker安装elasticsearch

docker pull elasticsearch

docker images 

docker run  -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -di  -p 9200:9200 -p 9300:9300 --name es01 ac5d415b7621

2、安装head客户端

git 地址:

https://github.com/mobz/elasticsearch-head

安装node  、进入elasticsearch-head目录执行 npm run start

3、使用restful 方式测试

(1)创建索引库

put: http://localhost:9200/索引库名称
{
"settings":{ "index":{ "number_of_shards":1, "number_of_replicas":0 } } }

 number_of_shards: 设置分片数、在集群中通常设置多个分片,表示一个索引库拆将分成多分片分别存在不同的节点中,提高性能和高可用性,单机环境设置为1

number_of_replicas: 设置副本数量,共1个分片,0个副本

(2)创建映射

说明: 索引中没有document中有一个或多个field、创建映射就是向索引库中创建field的过程,定义结构,document相当于row、field相当于字段,注意在es6.0之前还有type的概念,相当于表,官方说9.0之后要彻底删除

索引库相当于关系型数据的的库还是表:

相当于库:一个索引库中可以放不同类型的document ,这也是允许的

相当于表: 一个索引库中只能存相同类型的document、ES官方建议的

post: http://localhost:9200/索引库名/类型名称/_mapping    //类型名官方在弱化、建议取无关业务名称,如doc 

{
"properties": { "description": { "type": "text" }, "name": { "type": "text" }, "studymodel": { "type": "keyword" } } }

(3)创建文档

put 或Post http://localhost:9200/xc_course/doc/id值 (如果不指定id值ES会自动生成ID)

{
    "description": "Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的 精美界面效果。",
    "name": "Bootstrap开发框架",
    "studymodel": "201001"
}

(4)搜索文档

  • 根据id搜索

get   http://localhost:9200/xc_course/doc/4028e58161bcf7f40161bcf8b77c0000

  • 查询所有

get  http://localhost:9200/xc_course/doc/_search

  • 查询name中包含Bootstrap关键字的字段(name:document的一个field)

get http://119.27.182.24:9200/xc_course/doc/_search?q=name:bootstrap

4、查询结果分析

{
    "took": 12,   
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 0.2824934,
        "hits": [
            {
                "_index": "xc_course",
                "_type": "doc",
                "_id": "4028e58161bcf7f40161bcf8b77c0000",
                "_score": 0.2824934,
                "_source": {
                    "description": "Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的 精美界面效果。",
                    "name": "Bootstrap开发框架",
                    "studymodel": "201001"
                }
            }
        ]
    }
}

took: 本次操作花费的时间,单位是毫秒

time_out: 请求是否超时

_shards: 本次操作搜索了哪些分片

hits.total: 符合条件的document总数、

hits.max_score: 文档匹配最高分

hits.hits: 匹配度较高的前n个documents

hits.hits._score:当前文档的匹配得分

hits.hits._source: 显示文档的原始内容

5、Ik分词器

es默认使用的分词器对中文单字分词、因此需要自己安装IK分词器对中文进行分词,ik分词器安装见“ik分词器安装”

5.1 测试ik分词器

post : localhost:9200/_analyze

{"text":"测试分词器,后边是测试内容:spring cloud实战","analyzer":"ik_max_word"}

特别注意要加analyzer 指定分词器分词模式,否则仍然使用默认的中文单字分词

5.2 ik分词器的两种分词模式

(1)ik_max_word 细粒度

会将文本做细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、 华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

(2)ik_smart  粗粒度

会做粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

索引和搜索都是使用ik_max_word分词模式


"name":{ "analyzer":"ik_max_word" }

索引ik_max_word分词模式、搜索用ik_smart分词模式

"name":{
   "analyzer":"ik_max_word",
   "search_analyzer": "ik_smart"
}

5.3 自定义词库

(1)ik 自带config/main.dic文件,这是默认词库文件

(2)新建my.dic文件(拷贝main.dic改文件名) 

  (3)   在my.dic 中配置自定义词汇

特别注意在编辑了自定义词汇之后,右键另存为将保存编码格式从UTF-8(BOM)改成UTF-8 ,否则不生效

(4)配置自定义词库

IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">my.dic</entry>
     <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords"></entry>
    <!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->
    <!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

 (5)重启、测试

         

6、映射

6.1 映射维护方法

(1)查询所有映射

GET:  http://localhost:9200/_mapping

(2)创建映射

前面有

(3)更新映射

注意: 映射创建之后可以添加新的字段、但是不能修改之前的字段(除非删除整个映射索引库)

(4)删除映射

通过索引库删除映射

6.2常用映射类型

(1) text

"name":{
   "type": "text"
   "analyzer":"ik_max_word",
   "index": false
}

index: 表示不需要索引,只有索引才能从索引库中被找到

(2)keyword

字符串类型包括text  和 keyword, keyword 作为关键字字段,用于整体搜索,索引不分词

(3)date 日期类型

{
    "properties": {
        "timestamp": {
            "format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd",
            "type": "date"
        }
    }
}

format设置日期格式

(4)scaled_float

"price":{
   "type":"scaled_float",
   "scaling_factor": 100
}

对于浮点数,尽量使用比例因子,上面设置scaling_factor :100 ,那么价格23.456会乘以100,再四舍五入储存整数在es中,好处是整型比浮点型更易压缩,节省空间

原文地址:https://www.cnblogs.com/dehigher/p/10146235.html