• ElasticSearch 入门笔记1


    1. 起步

    1. 建demo工程,看文档,做典型demo

    2. 资源列表:

    http://es.xiaoleilu.com/010_Intro/10_Installing_ES.html

    3. 启动:

    elasticsearch.bat

    启动完成后

    用ARC工具访问 http://localhost:9200/

    2016-09-24 15-12-52_Advanced REST client

    这说明你的ELasticsearch集群已经启动并且正常运行,接下来我们可以开始各种实验了。

    https://imququ.com/post/elasticsearch.html 用ElasticSearch进行全文搜索示例

    2. 安装分词器

      编译IK分词器

    E:02.toolsapache-maven-3.0.4inmvn.bat package

    编译过程中遇到 早先配置的oschina镜像停止了

    用 <url>http://repo2.maven.org/maven2/</url>

    修改 C:Userschen.simon.m2 settings.xml配置

    如果一切顺利,在 target/releases/ 目录下可以找到编好的文件。将其解压并拷到 ~/es_root 对应目录:

    mkdir -p ~/es_root/plugins/ik/
    unzip target/releases/elasticsearch-analysis-ik-1.9.0.zip -d ~/es_root/plugins/ik/
    

    elasticsearch-analysis-ik 的配置文件在 ~/es_root/plugins/ik/config/ik/ 目录,很多都是词表,直接用文本编辑器打开就可以修改,改完记得保存为 utf-8 格式。

    现在再启动 Elasticsearch 服务,如果看到类似下面这样的信息,说明 IK Analysis 插件已经装好了:

    java.lang.IllegalArgumentException: Plugin [analysis-ik] is incompatible with Elasticsearch [2.4.0]. Was designed for version [2.3.0]

    晕  这个版本不兼容elasticsearch2.4.0

    去github重新找

    https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v1.10.0/elasticsearch-analysis-ik-1.10.0.zip

    这个是匹配的  并且这个是编译好的 无需mvn package  直接解开用

    将他source包拿下来 以便以后使用

    增加java启动参数 以便调试

    在elasticsearch.bat中 "%JAVA_HOME%injava开头的这一行 %JAVA_OPTS%后面 -Xdebug -Xrunjdwp:transport=dt_socket,address=8500,server=y,suspend=y

    elasticsearch所在路径 不能有含有空格 否则会出现诡异的权限问题(空格转成了%20了)

    2016-09-24 17-31-51_解决:java.security.AccessControlException_ Access Denied Error - changyanmanman的专栏

    配置同义词

    Elasticsearch 自带一个名为 synonym 的同义词 filter。为了能让 IK 和 synonym 同时工作,我们需要定义新的 analyzer,用 IK 做 tokenizer,synonym 做 filter。听上去很复杂,实际上要做的只是加一段配置。

    打开 ~/es_root/config/elasticsearch.yml 文件,加入以下配置:

    index:
      analysis:
        analyzer:
          ik_syno:
              type: custom
              tokenizer: ik_max_word
              filter: [my_synonym_filter]
          ik_syno_smart:
              type: custom
              tokenizer: ik_smart
              filter: [my_synonym_filter]
        filter:
          my_synonym_filter:
              type: synonym
              synonyms_path: analysis/synonym.txt

    以上配置定义了 ik_syno 和 ik_syno_smart 这两个新的 analyzer,分别对应 IK 的 ik_max_word 和 ik_smart 两种分词策略。根据 IK 的文档,二者区别如下:

    ik_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合;
    ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」;

    ik_syno 和 ik_syno_smart 都会使用 synonym filter 实现同义词转换。为了方便后续测试,建议创建~/es_root/config/analysis/synonym.txt 文件,输入一些同义词并存为 utf-8 格式。例如:

    ua,user-agent,userAgent
    js,javascript
    谷歌=>google
     
    ----
    准备测试
     

    3. 基本概念

     

    2016-09-24 18-22-38_使用 Elasticsearch 实现博客站内搜索 _ JerryQu 的小站

    4. 创建index

    2016-09-24 18-26-05_Advanced REST client

    响应:

    2016-09-24 18-26-13_Advanced REST client

    这就创建了一个simon的index  相当于mysql的database    再次发送这个请求 服务器就回400 bad request

    注意此时http method 为put

    如果使用get的http method 便能查询到此index的信息:

    2016-09-24 18-28-00_

    查询index

    http://localhost:9200/_cat/indices?v

    GET

    相关文档:

    https://www.elastic.co/guide/en/elasticsearch/reference/2.4/indices-create-index.html

    5. 创建mapping

    Type 不用单独创建,在创建 Mapping 时指定就可以。Mapping 用来定义 Document 中每个字段的类型、所使用的 analyzer、是否索引等属性,非常关键。创建 Mapping 的代码示例如下:

    url http://localhost:9200/simon/_mapping/article

    {
        "properties": {
            "title": {
                "type": "string",
                "term_vector": "with_positions_offsets",
                "analyzer": "ik_syno",
                "search_analyzer": "ik_syno"
            },
            "content": {
                "type": "string",
                "term_vector": "with_positions_offsets",
                "analyzer": "ik_syno",
                "search_analyzer": "ik_syno"
            },
            "slug": {
                "type": "string"
            },
            "tags": {
                "type": "string",
                "index" : "not_analyzed"
            },
            "update_date": {
                "type" : "date",
                "index" : "not_analyzed"
            }
                
        }
    }

    注意: 如果报 elasticseatch analyzer [ik_syno]  not found for field  则需要检查elasticsearch.yml文件中是否配置了此分析器

    2016-09-24 19-09-46_Advanced REST client

    响应:

    2016-09-24 19-10-14_Advanced REST client

    6. 加入数据

    url http://localhost:9200/simon/article/1 方法:put

    1表示这条数据的id

    报文:

    {
        "title" : "什么是 JS?",
        "slug" :"what-is-js",
        "tags" : ["JS", "JavaScript", "TEST"],
        "content" : "JS 是 JavaScript 的缩写!",
        "update_date" : "2015-12-15T13:05:55Z"
    }

    2016-09-24 19-27-13_Advanced REST client

    2016-09-24 19-27-21_Advanced REST client

    如何不指定id ,自动生成

    http://localhost:9200/simon/article/_search 这个可以查到加入的数据

    简单的查询也可以  http://localhost:9200/simon/article/_search?q=js

    更复杂的查询就需要 query dsl了

    7. 其他 

    查询所有index

    http://localhost:9200/_cat/indices?v

  • 相关阅读:
    pyinstall打包工具
    python中用xlsxwriter创建图表
    python打包工具 cx_Freeze介绍
    JavaScript、Dom和jQuery
    MHA原理
    mysql-mmm实现高可用和部署时须要考虑的问题
    jquery中attr和prop的区别
    FLUSH TABLES WITH READ LOCK 获取锁的速度
    Python Memcached、Redis & RabbitMQ使用
    innodb_flush_log_at_trx_commit
  • 原文地址:https://www.cnblogs.com/simoncook/p/5903947.html
Copyright © 2020-2023  润新知