• 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中,好处是整型比浮点型更易压缩,节省空间

  • 相关阅读:
    iOS-夜间模式(换肤设置)
    iOS-自定义起始时间选择器视图
    [SpriteKit] 系统框架中Cocos2d-x制作小游戏ZombieConga
    [SceneKit] 不会 Unity3D 的另一种选择
    Android WiFi开发
    Java 工具类 —— 定时器(Timer/TimerTask)
    java 语法 —— 数组
    IDEA 的使用(快捷键、括号对齐的方式)
    cmd 高级用法
    MySQL 基本信息的查询(初始化配置信息 my.ini)
  • 原文地址:https://www.cnblogs.com/dehigher/p/10146235.html
Copyright © 2020-2023  润新知