• 全文搜索引擎Elasticsearch入门实践


    全文搜索引擎Elasticsearch入门实践

    感谢阮一峰的网络日志全文搜索引擎 Elasticsearch 入门教程

    1. 安装
      首先需要依赖Java环境。Elasticsearch官网https://www.elastic.co/downloads/elasticsearch

      直接下载压缩包。

      $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
      $ unzip elasticsearch-5.5.1.zip
      $ cd elasticsearch-5.5.1/ 
      

      接着,进入解压后的目录,运行下面的命令,启动 Elasticsearch。

      $ ./bin/elasticsearch
      

      看到控制台如下信息启动成功。

      [2017-08-30T19:37:02,505][INFO ][o.e.h.n.Netty4HttpServerTransport] [3GsuzVd] publish_address {127.0.0.1:9200}, bound_addresses {[fe80::1]:9200}, {[::1]:9200}, {127.0.0.1:9200}
      

      获取当前Elasticsearch版本信息。

      ➜  elasticsearch-5.5.1 curl localhost:9200
      {
        "name" : "3GsuzVd",
        "cluster_name" : "elasticsearch",
        "cluster_uuid" : "qchzr2YSQtCUxLwVmGtYcA",
        "version" : {
          "number" : "5.5.1",
          "build_hash" : "19c13d0",
          "build_date" : "2017-07-18T20:44:24.823Z",
          "build_snapshot" : false,
          "lucene_version" : "6.6.0"
        },
        "tagline" : "You Know, for Search"
      }
      
    2. 基本概念
      Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elasticsearch 实例。
      单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
      Elastic 数据管理的顶层单位就叫做 Index(索引),它是单个数据库的同义词,每个 Index (即数据库)的名字必须是小写。
      Type(类型),它是数据库表的同义词。Document(文档),它是数据库行的同义词,使用 JSON 格式表示。

      下面的命令可以查看当前节点的所有 Index。

      $ curl -X GET 'http://localhost:9200/_cat/indices?v'
      

      下面的命令可以列出每个 Index 所包含的 Type。

      $ curl 'localhost:9200/_mapping?pretty=true'
      
    3. 新建和删除 Index
      新建 Index,可以直接向 Elastic 服务器发出 PUT 请求。下面的例子是新建一个名叫weather的 Index。

      ➜  elasticsearch-5.5.1 curl -X PUT 'localhost:9200/weather'
      {"acknowledged":true,"shards_acknowledged":true}% 
      

      然后,我们发出 DELETE 请求,删除这个 Index。

      $ curl -X DELETE 'localhost:9200/weather'
      
    4. 中文分词设置
      首先,安装中文分词插件,这里使用的是 ik。

      $ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip
      

      上面代码安装的是5.5.1版的插件,与 Elastic 5.5.1 配合使用,版本不匹配会报错。
      安装完成,重新启动 Elasticsearch,就会自动加载这个新安装的插件。
      然后,新建一个 Index,指定需要分词的字段。这一步根据数据结构而异,下面的命令只针对本文。基本上,凡是需要搜索的中文字段,都要单独设置一下。

      $ curl -X PUT 'localhost:9200/accounts' -d '
      {
       "mappings": {
         "person": {
           "properties": {
             "user": {
               "type": "text",
               "analyzer": "ik_max_word",
               "search_analyzer": "ik_max_word"
             },
             "title": {
               "type": "text",
               "analyzer": "ik_max_word",
               "search_analyzer": "ik_max_word"
             },
             "desc": {
               "type": "text",
               "analyzer": "ik_max_word",
               "search_analyzer": "ik_max_word"
             }
           }
         }
       }
      }'
      

      上面代码中,analyzer是字段文本的分词器,search_analyzer是搜索词的分词器。ik_max_word分词器是插件ik提供的,可以对文本进行最大数量的分词。

    5. 数据操作
      5.1. 新增
      向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录。比如,向/accounts/person发送请求,就可以新增一条人员记录。
      $ curl -X PUT 'localhost:9200/accounts/person/1' -d ' { "user": "张三", "title": "工程师", "desc": "数据库管理" }'
      新增记录的时候,也可以不指定 Id,这时要改成 POST 请求。
      $ curl -X POST 'localhost:9200/accounts/person' -d ' { "user": "李四", "title": "工程师", "desc": "系统管理" }'
      5.2. 查询
      向/Index/Type/Id发出 GET 请求,就可以查看这条记录。
      ➜ elasticsearch-5.5.1 curl 'localhost:9200/accounts/person/1?pretty=true' { "_index" : "accounts", "_type" : "person", "_id" : "1", "_version" : 4, "found" : true, "_source" : { "user" : "张三", "title" : "工程师", "desc" : "数据库管理,软件开发" } }
      5.3. 修改
      更新记录就是使用 PUT 请求,重新发送一次数据。
      ➜ elasticsearch-5.5.1 curl -X PUT 'localhost:9200/accounts/person/1' -d ' { "user" : "张三", "title" : "工程师", "desc" : "数据库管理" }' {"_index":"accounts","_type":"person","_id":"1","_version":5,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"created":false}%
      可以看到,记录的 Id 没变,但是版本(version)从4变成5,操作类型(result)从created变成updated,created字段变成false,因为这次不是新建记录。
      5.4. 删除
      删除记录就是发出 DELETE 请求。
      $ curl -X DELETE 'localhost:9200/accounts/person/1'

    6. 数据查询
      使用 GET 方法,直接请求/Index/Type/_search,就会返回所有记录。

      $ curl 'localhost:9200/accounts/person/_search'
      

      6.1. 全文搜索
      $ curl 'localhost:9200/accounts/person/_search' -d ' { "query" : { "match" : { "desc" : "软件" }} }'
      Elastic 默认一次返回10条结果,可以通过size字段改变这个设置,from代表起始点,从0开始。
      $ curl 'localhost:9200/accounts/person/_search' -d '
      {
      "query" : { "match" : { "desc" : "管理" }},
      "from": 1,
      "size": 1
      }'
      详情参考上面的引用。

  • 相关阅读:
    Java IO流之缓冲流
    Java文件流之练习
    PHP使用mkdir创建多级目录的方法
    PHP中file_exists()判断中文文件名无效的解决方法
    如何用CURL将文件下载到本地指定文件夹
    解决Maximum execution time of 120 seconds exceeded
    批量插入数据insert into select示例
    PHP数据结构之五 栈的PHP的实现和栈的基本操作
    PHP数据结构之四 一元多项式的相加PHP单链实现
    PHP数据结构之三 线性表中的单链表的PHP实现
  • 原文地址:https://www.cnblogs.com/yaojf/p/7453420.html
Copyright © 2020-2023  润新知