今日の記事では、我々は簡単なLogstash体験を行い、そしてジオ検索を体験します。すべての郵便番号は、郵便番号です我々のデータは、中国です。
インストール
あなたは自分自身の弾性スタックをインストールしていない場合:
- 「の記事を参照してください:ルーキースタートガイド弾性 ElasticsearchとKibanaをインストールする」を。
- 「の記事を参照してください。弾性スタックLogstashインストール方法インストールLogstashを」
上記のインストールでは、インストールするには、インストールされているすべてのデフォルトデフォルトの方法です。9200、およびKibanaは、ローカルホスト上で実行されている:ローカルホスト上で実行されているElasticsearch 5601に。
ダウンロードデータ
レッツは、次のコマンドを使用して我々のデータをダウンロードしてください:
git clone https://github.com/liu-xiao-guo/elasticzipcodes
上記をダウンロードすることにより、我々はzipcodes.csvと呼ばれるファイルを取得することができます。次のようにそのファイルの内容は以下のとおりです。
上記の表から、我々は見ることができます:ID、コード、AreaCode、名前、短縮名、Logitude、緯度、ソート、メモ、無効フィールドが含まれているこのzipcodes.csvファイル、で。私たちは、ファイルを好きなこの場所は、ファイルのディレクトリをダウンロード呼び出します。
データのインポート
Elasticsearchにデータを置くために、我々はLogstashを使用しています。この目的のために、我々は我々自身のlogstash設定ファイルを記述します。
logstash_zipcodes.conf
input {
file {
path => "/Users/liuxg/data/zipcodes/zipcodes.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
columns => ["Id", "Code", "AreaCode", "Name", "ShortName", "Longitude", "Latitude", "Sort", "Memo", "Disabled"]
}
mutate {
convert => {"Longitude" => "float"}
convert => {"Latitude" => "float"}
add_field => ["location", "%{Latitude},%{Longitude}"]
rename => ["Code", "zipcode"]
}
}
output {
stdout {codec => rubydebug}
elasticsearch {
index => "zipcodes"
hosts => ["http://localhost:9200"]
}
}
入力、フィルタ出力:我々はLogstashパイプラインは3つの部分で構成さを知っています。
上記の入力部では、ファイルzipcodes.csvへのパスを指定するには、私たちの入力ファイルを使用します。この文書で独自の実際のパスによると、我々はそれに応じて調整する必要があります。
フィルタセクションでは、我々は適切なフィールドを事前にフィルタをCSV。私たちは、データの変換や名前変更の種類を変異させるフィルタを使用します。のは、緯度と経度のコンポーネントで構成されadd_fieldsによって場所と呼ばれる新しいフィールドを作成してみましょう。
私たちの出力部には、当社の標準出力stdoutに我々出力。多くの場合、それは私たちのLogstashパイプラインは一緒に使用されるデバッグを支援することができます。同時に、我々は我々の地元Elasticsearchにエクスポートします。我々のデータは、ジップコードインデックスと呼ばれる場所に保存されます。
私たちは私たちのニーズにエネルギーを生成Elasticsearchヘルプジップコードを作ることができるようにするために、我々は中Kibanaで次のコマンドを入力します。
PUT _template/zipcodes
{
"order": 10,
"index_patterns": [
"zipcodes*"
],
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1
},
"mappings": {
"properties": {
"zipcode": {
"type": "text"
},
"location": {
"type": "geo_point"
}
}
},
"aliases": {}
}
上記に示したインデックステンプレートいる:上で定義したときはいつでも、インデックスのジップコード*インデックスパターンを設定、マッピングとエイリアスを持つことになります。上記では、私たちは私たちの場所はgeo_pointデータ型として定義されて置きます。
私たちは、次のコマンドによってLogstashを起動することができます。
sudo ./bin/logstash -f ~/data/zipcodes/logstash_zipcodes.conf
当社Logstash開始したら、我々は、ターミナルで次の出力を見ることができます
我々上記のようLogstashのヘルプを参照してくださいから、私たちは、様々な分野を生み出します。
私たちは、Kibanaを開き、次のコマンドを入力することができます。
GET zipcodes/_count
私たちは、次の結果を見ることができます:
{
"count" : 42358,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}
上記では、我々は42358件の文書を持っていることがわかります。
データの検索 - ジオ・サーチ
我々はジオデータのインポートを見ている以上、私たちは、次のコマンドにより、当社のデータを照会することができます:
GET zipcodes/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": {
"geo_distance": {
"distance": "1km",
"location": {
"lat": 39.920086,
"lon": 116.454182
}
}
}
}
}
}
上記では、我々は、私は中央に1キロの半径午前(116.454182、39.920086)を調整するために、すべての文書を照会します。結果はそれを示しています。
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "zipcodes",
"_type" : "_doc",
"_id" : "rvG12HABqA-NWEvj7Dj0",
"_score" : 1.0,
"_source" : {
"Memo" : null,
"Latitude" : 39.920929,
"Name" : "呼家楼街道",
"message" : "35,110105003,110105,呼家楼街道,呼家楼街道,116.464325,39.920929,16,,false",
"Sort" : "16",
"host" : "liuxg",
"AreaCode" : "110105",
"location" : "39.920929,116.464325",
"path" : "/Users/liuxg/data/zipcodes/zipcodes.csv",
"ShortName" : "呼家楼街道",
"Id" : "35",
"Longitude" : 116.464325,
"@version" : "1",
"@timestamp" : "2020-03-14T11:02:43.681Z",
"zipcode" : "110105003",
"Disabled" : "false"
}
}
]
}
もちろん、我々はまた、上記の距離がより多くの結果が得られるように調整されて変更することができます。
同様に、我々はまた、定義された矩形領域を検索することができます。
GET zipcodes/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 39.94086,
"lon": 116.454182
},
"bottom_right": {
"lat": 39.930086,
"lon": 116.464182
}
}
}
}
}
}
}
上記、我々は2つの座標位置を定義しました。これら二つの位置は、矩形領域を定義します。上記の検索はどここのエリア内のすべての文書が表示されます。
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "zipcodes",
"_type" : "_doc",
"_id" : "MfG12HABqA-NWEvj7Diy",
"_score" : 1.0,
"_source" : {
"Memo" : null,
"Latitude" : 39.931461,
"Name" : "团结湖街道",
"message" : "45,110105013,110105,团结湖街道,团结湖街道,116.462578,39.931461,35,,false",
"Sort" : "35",
"host" : "liuxg",
"AreaCode" : "110105",
"location" : "39.931461,116.462578",
"path" : "/Users/liuxg/data/zipcodes/zipcodes.csv",
"ShortName" : "团结湖街道",
"Id" : "45",
"Longitude" : 116.462578,
"@version" : "1",
"@timestamp" : "2020-03-14T11:02:43.684Z",
"zipcode" : "110105013",
"Disabled" : "false"
}
}
]
}
以上の結果は、我々が定義するエリア内のすべての文書です。
表示データ
上記では、簡単に私たちのデータを検索することができます。また、Kibanaが私たちのすべてのドキュメントを表示するために提供さ強力な画像ツールを使用することができます。これを行うには、まずジップコードのと呼ばれるインデックスパターンを作成します。
上記は、「クリックして、インデックスパターンを作成します」:
「上をクリックし、次のステップ」ボタン:
これは一連の文書ではありませんので、我々は選択したので、「私は使用したくないタイマーフィルター」。「をクリックして作成したインデックスパターン」:
*インデックスパターン私たちのジップコードを作成し、我々はそう。
次は、私たちはジップコードのための可視化を作成します。
「上をクリックビジュアライゼーションを作成」ボタン:
私たちは、「選択したマップ」:
上記の「クリックして追加レイヤー」ボタンを:
「をクリックしてドキュメント」:
「上をクリックし追加レイヤー」:
私たちは、郵便番号や短縮名のためのツールチップを追加しました:
「上をクリックし保存して使用閉じる」ボタン:
私たちは、すべての文書は、上記から、中国の位置をマップに表示されて見ることができます。私たちは、マップを拡大し、次のような絵を見ることができます:
私たちのマウスがドキュメント上に配置されたとき、それは名前と郵便番号現在位置を表示することができます。
同時に、我々は我々が検索したいエリアを定義するためのツール上記のマップを使用することができます。
我々は、マウスを使用してエリアを定義する必要があります。
描画図形を選択します。
我々は、我々が検索したい領域をマークするためにマウスで私たちのお気に入りのエリアでは、我々は最終的にだけでは、どこの文書領域を示しだから、フィルタを形成することができます。
形状における位置:上記のフィルタを選択します。
上記の[編集]フィルタを選択し、我々は見ることができます:
上記では、geo_polygon使用を検索するために必要なDSLを使用してのポイントを見ることができます:
GET zipcodes/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": {
"geo_polygon": {
"ignore_unmapped": true,
"location": {
"points": [
{
"lat": 40.05915,
"lon": 115.95216
},
{
"lat": 39.86638,
"lon": 116.22583
},
{
"lat": 40.08309,
"lon": 116.31184
},
{
"lat": 40.05915,
"lon": 115.95216
}
]
}
}
}
}
}
}
上記のクエリの結果は、13個の文書が表示されます。
"hits" : {
"total" : {
"value" : 13,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "zipcodes",
"_type" : "_doc",
"_id" : "svG12HABqA-NWEvj7Dj0",
"_score" : 1.0,
"_source" : {
"Memo" : null,
"Latitude" : 39.916122,
"Name" : "八角街道",
"message" : "99,110107003,110107,八角街道,八角街道,116.195648,39.916122,2,,false",
"Sort" : "2",
"host" : "liuxg",
"AreaCode" : "110107",
"location" : "39.916122,116.195648",
"path" : "/Users/liuxg/data/zipcodes/zipcodes.csv",
"ShortName" : "八角街道",
"Id" : "99",
"Longitude" : 116.195648,
"@version" : "1",
"@timestamp" : "2020-03-14T11:02:43.694Z",
"zipcode" : "110107003",
"Disabled" : "false"
}
},
{
"_index" : "zipcodes",
"_type" : "_doc",
"_id" : "MfG12HABqA-NWEvj7Tk5",
"_score" : 1.0,
"_source" : {
"Memo" : null,
"Latitude" : 40.003696,
"Name" : "军庄镇",
"message" : "143,110109104,110109,军庄镇,军庄镇,116.103455,40.003696,5,,false",
"Sort" : "5",
"host" : "liuxg",
"AreaCode" : "110109",
"location" : "40.003696,116.103455",
"path" : "/Users/liuxg/data/zipcodes/zipcodes.csv",
"ShortName" : "军庄镇",
"Id" : "143",
"Longitude" : 116.103455,
"@version" : "1",
"@timestamp" : "2020-03-14T11:02:43.704Z",
"zipcode" : "110109104",
"Disabled" : "false"
}
},
{
"_index" : "zipcodes",
"_type" : "_doc",
"_id" : "KfG12HABqA-NWEvj7Tqx",
"_score" : 1.0,
"_source" : {
"Memo" : null,
"Latitude" : 39.898903,
"Name" : "八宝山街道",
"message" : "97,110107001,110107,八宝山街道,八宝山街道,116.231972,39.898903,1,,false",
"Sort" : "1",
"host" : "liuxg",
"AreaCode" : "110107",
"location" : "39.898903,116.231972",
"path" : "/Users/liuxg/data/zipcodes/zipcodes.csv",
"ShortName" : "八宝山街道",
"Id" : "97",
"Longitude" : 116.231972,
"@version" : "1",
"@timestamp" : "2020-03-14T11:02:43.694Z",
"zipcode" : "110107001",
"Disabled" : "false"
}
},
...
]
...
私たちは、使用中であるために、ダッシュボード内の現在の可視化ダウンを保存することができます:
[保存]を選択し、最終的に、私たちは自分のダッシュボードを形成しています。