Ubuntu1604 Docker下使用ElasticSearch2.3.3

ElasticSearch是一個開源的分布式搜索引擎,具備高可靠性,支持非常多的企業(yè)級搜索用例。像Solr4一樣,是基于Lucene構建的。支持時間時間索引和全文檢索。官網:http://www.elasticsearch.org
它對外提供一系列基于java和http的api,用于索引、檢索、修改大多數配置。

本文從Ubuntu1604下的Docker安裝啟動ElasticSearch、創(chuàng)建索引、搜索三方面說明ElasticSearch的易用性。

一、啟動ElasticSearch

docker run -d -p 9200:9200 -p 9300:9300 elasticsearch:2

注:

  1. -p 9200:9200 -p 9300:9300參數可以讓運行ElasticSearch外的其他終端訪問ElasticSearch;
  2. docker加速器請參考加速器安裝。

瀏覽器中打開http://192.168.29.128:9200/,如果結果如下:

Paste_Image.png

說明安裝和啟動成功。

二、創(chuàng)建索引

在服務器上插入15條數據:

curl -XPUT 'http://localhost:9200/dept/employee/1' -d '{ "empname": "emp1"}'
curl -XPUT 'http://localhost:9200/dept/employee/2' -d '{ "empname": "emp2"}'
curl -XPUT 'http://localhost:9200/dept/employee/3' -d '{ "empname": "emp3"}'
curl -XPUT 'http://localhost:9200/dept/employee/4' -d '{ "empname": "emp4"}'
curl -XPUT 'http://localhost:9200/dept/employee/5' -d '{ "empname": "emp5"}'
curl -XPUT 'http://localhost:9200/dept/employee/6' -d '{ "empname": "emp6"}'
curl -XPUT 'http://localhost:9200/dept/employee/7' -d '{ "empname": "emp7"}'
curl -XPUT 'http://localhost:9200/dept/employee/8' -d '{ "empname": "emp8"}'
curl -XPUT 'http://localhost:9200/dept/employee/9' -d '{ "empname": "emp9"}'
curl -XPUT 'http://localhost:9200/dept/employee/10' -d '{ "empname": "emp10"}'
curl -XPUT 'http://localhost:9200/dept/employee/11' -d '{ "empname": "emp11"}'
curl -XPUT 'http://localhost:9200/dept/employee/12' -d '{ "empname": "emp12"}'
curl -XPUT 'http://localhost:9200/dept/employee/13' -d '{ "empname": "emp13"}'
curl -XPUT 'http://localhost:9200/dept/employee/14' -d '{ "empname": "emp14"}'
curl -XPUT 'http://localhost:9200/dept/employee/15' -d '{ "empname": "emp15"}'

其中http://localhost:9200/dept/employee/1dept代表索引,employee代表文檔類型,1代表文檔編號。

ElasticSearch的基本概念:

ElasticSearch-->indices(索引)-->types(文檔類型)-->documents(文檔)

通過http://192.168.29.128:9200/dept/employee/_search查看剛才添加的所有索引,結果如下:

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 16,
    "max_score": 1,
    "hits": [
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "14",
        "_score": 1,
        "_source": {
          "empname": "emp14"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "32",
        "_score": 1,
        "_source": {
          "empname": "emp32"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "5",
        "_score": 1,
        "_source": {
          "empname": "emp5"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "8",
        "_score": 1,
        "_source": {
          "empname": "emp8"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "9",
        "_score": 1,
        "_source": {
          "empname": "emp9"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "10",
        "_score": 1,
        "_source": {
          "empname": "emp10"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "12",
        "_score": 1,
        "_source": {
          "empname": "emp12"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "2",
        "_score": 1,
        "_source": {
          "empname": "emp2"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "4",
        "_score": 1,
        "_source": {
          "empname": "emp4"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "6",
        "_score": 1,
        "_source": {
          "empname": "emp6"
        }
      }
    ]
  }
}

三、簡單搜索

剛才已經查看了所有新創(chuàng)建的索引,現在更新一下第10條記錄:

curl -XPUT 'http://localhost:9200/dept/employee/10' -d '{ "empname": "emp10 emp1 emp3"}'

然后搜索empname包含emp1的文檔:

http://192.168.29.128:9200/dept/employee/_search?q=empname:emp1

結果如下:

{
  "took": 12,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1.4054651,
    "hits": [
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "1",
        "_score": 1.4054651,
        "_source": {
          "empname": "emp1"
        }
      },
      {
        "_index": "dept",
        "_type": "employee",
        "_id": "10",
        "_score": 1.1263815,
        "_source": {
          "empname": "emp10 emp1 emp3"
        }
      }
    ]
  }
}

上面通過http get的方式進行的搜索也可以用DSL(Domain Specific Language特定領域語言)代替,結果一樣:

{
  "query" : {
    "match" : {
      "empname" : "emp1"
    }
  }
}

結束

暫時記錄這么多,為了快速上手,并說明ElasticSearch的易用性。


參考文檔:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容