前回、色々いじった続きでして、何をどうすればどうなるのかさっぱりわからないので、使いそうな機能を調べてメモしておきたいと思います。Mysqlであれば、例えばdescribe table_nameだったりとか、色々使う機能をElasticSearchに置き換えるとどうしたらいいのか?っていうのを予め調べておきたいと思います。

index一覧を表示する

要は、MySQLでいうところのshow databases ですかね。_cat/indicesで表示できます。

http://{サーバーのアドレス}:9200/_cat/indices にアクセスする

###表示結果
yellow open index1                 vLzMftUORf6K63dXAeE1zg 5 1 1 0  6.2kb  6.2kb
green  open .kibana_1            iDYYpGB_SNyhHcAB832lMA 1 0 5 0 20.7kb 20.7kb
yellow open index2                pLG1pN-3QbmT1YECMqGymA 5 1 1 0    5kb    5kb
yellow open index3          y6n-JiS4S5GEP4kKr-3G-w 5 1 3 0 63.6kb 63.6kb
yellow open index4                VaiiiQFzR6yPbE1jyDNBqg 5 1 1 0 22.8kb 22.8kb
green  open .kibana_task_manager e1cAJPc7RbmTSllfYfV4Ug 1 0 2 0 12.6kb 12.6kb

あぁ、確かにindexの一覧が出ますね。。。ちなみに、クエリでs=indexってつけると、index名でソートできるらしいですよ。helpを投げると使い方が出るとか。

ところで。。。。。。。私が適当に作ったものには、yellowと書いてあるんですけど。。みたところ、greenは良さげな雰囲気が出てますが、yellowって微妙ですよ。このindexって意味では。。。色について調べてみると。。

ElasticSearchのindexがyellowの状態とは?
すべてのデータが利用可能ではあるものの、replicasが割り当てられていない状態のことらしい。

ちなみにredになると、動きはするがデータの一部が使えないという、障害的なノリが出てる状態らしい。

以下のありがたいウェブサイトに書いてありました。ありがたやー

まぁ、このあたりは今後覚えながらやるとして、一旦動くのでそれはそれでいいとしておきます。

特定のindexの詳細を見る

ただindexを指定するだけで、mappingの詳細を教えてくれる。ちなみに、普通にtextとしてのjsonが返ってくるけど、prettyをクエリに投げつけると、プリティーにインデントした結果を返してくれる

http://{サーバーのアドレス}:9200/{index名}?pretty にアクセスする。
Mysqlで言うところのdescribe table_name と同じ

###以下レスポンス内容

{
  "index名" : {
    "aliases" : { },
    "mappings" : {
      "mamama" : {
        "properties" : {
          "test1" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "test2" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {

〜〜〜〜以下略

indexを削除する

削除の際、methodはDELETEを使うので、PHPでサンプルソースを書いて実行してみます。
indexがあることをブラウザで確認して、以下を実行

$path='http://{サーバーのアドレス}:9200/{index名}?pretty';

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
    $res = curl_exec($curl);
    curl_close($curl);

    echo $res."\n\n\n";

####以下、レスポンス
{
  "acknowledged" : true
}

なんか、寂しいレスポンスですね。。。あっそ。。みたいなそっけないレスポンスです。。
acknowledgedって、認められたとか、そんな感じの意味らしいです。削除要求が認められたのでしょう。

ほんなら、元々アクセスできていたindexのページを見てみると、以下のような感じに。

{
  "error" : {
    "root_cause" : [
      {
        "type" : "index_not_found_exception",
        "reason" : "no such index",
        "resource.type" : "index_or_alias",
        "resource.id" : "{index名}",
        "index_uuid" : "_na_",
        "index" : "{index名}"
      }
    ],
    "type" : "index_not_found_exception",
    "reason" : "no such index",
    "resource.type" : "index_or_alias",
    "resource.id" : "{index名}",
    "index_uuid" : "_na_",
    "index" : "{index名}"
  },
  "status" : 404
}

何言ってのかよくわからないですが、404と書いてある時点で、ねーよって意味なんでしょう。
404の破壊力はすばらしいものがありますね。ほんと。

indexを作成する

MySQLでいうところのcreate tableのことです。
別にそのまま入れても勝手に作ってくれはするのですが、きちんと定義しておいたほうがよさそうです。
検索とか、どの部分にトークナイズを行うかどうかとかの設定もあるようです。このあたりはSolrも同じですね。

PHPで試しに作ってみました

//shardsの設定を入れる。適当に。
$data["settings"]["number_of_shards"]=3;
$data["settings"]["number_of_replicas"]=1;

//メインのテーブルの要件を決める
$data["mappings"]["test_type"]["properties"]["field1"]["type"]='text';
$data["mappings"]["test_type"]["properties"]["field1"]["fields"]["keyword"]["type"]='keyword';
$data["mappings"]["test_type"]["properties"]["field1"]["fields"]["keyword"]["ignore_above"]=256;

$data["mappings"]["test_type"]["properties"]["field2"]["type"]='text';
$data["mappings"]["test_type"]["properties"]["field2"]["fields"]["keyword"]["type"]='keyword';
$data["mappings"]["test_type"]["properties"]["field2"]["fields"]["keyword"]["ignore_above"]=256;
$json=json_encode($data);
$path='http://{サーバーのアドレス}:9200/new_index_name';


    $header = array(
        "Content-Type: application/json"
    );


    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl,CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
    $res = curl_exec($curl);
    curl_close($curl);

    echo $res."\n\n\n";

・・・・・実行結果
{"acknowledged":true,"shards_acknowledged":true,"index":"new_index_name"}

・・・・・インデックスの確認
{
  "new_index_name" : {
    "aliases" : { },
    "mappings" : {
      "test_type" : {
        "properties" : {
          "field1" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "field2" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1572715920144",
        "number_of_shards" : "3",
        "number_of_replicas" : "1",
        "uuid" : "O4HwLJOhR9qIGrPdNrb-EA",
        "version" : {
          "created" : "6080499"
        },
        "provided_name" : "new_index_name"
      }
    }
  }
}

ちゃんとできました。

APIの利用権限を変える

APIに書き込んだり読んだりとか、そういうことを許可したり拒否したりする設定の模様。
上記でmappingしたindexに対し、拒否した後に書き込んで見る

///APIをcloseする
$path='http://{サーバーのアドレス}:9200/new_index_name/_close';



    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    $res = curl_exec($curl);
    curl_close($curl);

    echo $res."\n\n\n";

...実行結果
{"acknowledged":true}

///データを投げてみる
$data["field1"]='field1_data';
$data["field2"]='field2_data';

$json=json_encode($data);
echo $json;
$path='http://{サーバーのアドレス}:9200/new_index_name/test_type';

    $header = array(
        "Content-Type: application/json"
    );


    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl,CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    //curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
    $res = curl_exec($curl);
    curl_close($curl);

    echo $res."\n\n\n";

....実行結果
{"field1":"field1_data","field2":"field2_data"}{"error":{"root_cause":[{"type":"index_closed_exception","reason":"closed","index_uuid":"O4HwLJOhR9qIGrPdNrb-EA","index":"new_index_name"}],"type":"index_closed_exception","reason":"closed","index_uuid":"O4HwLJOhR9qIGrPdNrb-EA","index":"new_index_name"},"status":400}

確かに、closedとエラーメッセージが出ている。ちゃんと拒否できてるようです。

今度は許可してみます

$path='http://{サーバーのアドレス}:9200/new_index_name/_open?pretty';



    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $path);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    $res = curl_exec($curl);
    curl_close($curl);

    echo $res."\n\n\n";

.....実行結果
{
  "acknowledged" : true,
  "shards_acknowledged" : true
}

....データを送ってみる
{"field1":"field1_data","field2":"field2_data"}{
  "_index" : "new_index_name",
  "_type" : "test_type",
  "_id" : "kE5KLW4Bh-R-D_zyi4bC",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 2
}

正常に投稿できました。よかった。

特定のindexのtype一覧を取得する

1    2  

コメント

ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
<a href="http://www.g5zl161o68efa0o2o022wc75e238ysjzs.org/">aoypiemfizc</a>
oypiemfizc http://www.g5zl161o68efa0o2o022wc75e238ysjzs.org/
[url=http://www.g5zl161o68efa0o2o022wc75e238ysjzs.org/]uoypiemfizc[/url]
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
[url=http://www.g7hqw87839o2b9j0mjnsj44nx9735k7ks.org/]uxojjhbqcpw[/url]
xojjhbqcpw http://www.g7hqw87839o2b9j0mjnsj44nx9735k7ks.org/
<a href="http://www.g7hqw87839o2b9j0mjnsj44nx9735k7ks.org/">axojjhbqcpw</a>
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
<a href="http://www.gx8m9i3xf8f7n4ak27z6w96617hv53kis.org/">ahpewvdcws</a>
hpewvdcws http://www.gx8m9i3xf8f7n4ak27z6w96617hv53kis.org/
[url=http://www.gx8m9i3xf8f7n4ak27z6w96617hv53kis.org/]uhpewvdcws[/url]
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
<a href="http://www.g801odi1gwd4z0350l4ku4edi636z6j5s.org/">awikbnyxed</a>
wikbnyxed http://www.g801odi1gwd4z0350l4ku4edi636z6j5s.org/
[url=http://www.g801odi1gwd4z0350l4ku4edi636z6j5s.org/]uwikbnyxed[/url]
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
<a href="http://www.gyk2kb5ib033l7wefs500938bhx8f270s.org/">alksthffwg</a>
lksthffwg http://www.gyk2kb5ib033l7wefs500938bhx8f270s.org/
[url=http://www.gyk2kb5ib033l7wefs500938bhx8f270s.org/]ulksthffwg[/url]
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
gxmwsdwz http://www.gyxuknl6i482sqm1e20n40n0s043t892s.org/
[url=http://www.gyxuknl6i482sqm1e20n40n0s043t892s.org/]ugxmwsdwz[/url]
<a href="http://www.gyxuknl6i482sqm1e20n40n0s043t892s.org/">agxmwsdwz</a>
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
[url=http://www.g89j2w9r0s9au0zxep15q904n652x6sos.org/]uicikcxtfc[/url]
<a href="http://www.g89j2w9r0s9au0zxep15q904n652x6sos.org/">aicikcxtfc</a>
icikcxtfc http://www.g89j2w9r0s9au0zxep15q904n652x6sos.org/
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
ombsdtbvn http://www.g462jj4s8185nfb6838jjpvo6p1io0j2s.org/
<a href="http://www.g462jj4s8185nfb6838jjpvo6p1io0j2s.org/">aombsdtbvn</a>
[url=http://www.g462jj4s8185nfb6838jjpvo6p1io0j2s.org/]uombsdtbvn[/url]
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
[url=http://www.g0job1737eogor9t3w481e499d8qw26ws.org/]urqxyfenir[/url]
<a href="http://www.g0job1737eogor9t3w481e499d8qw26ws.org/">arqxyfenir</a>
rqxyfenir http://www.g0job1737eogor9t3w481e499d8qw26ws.org/
ElasticSearchでマッピングの状況を見たり、基本機能を使ってみる|webトピ
<a href="http://www.gi33xdj0uc3p3rg81pus04c679i2541ts.org/">atroedcxscp</a>
[url=http://www.gi33xdj0uc3p3rg81pus04c679i2541ts.org/]utroedcxscp[/url]
troedcxscp http://www.gi33xdj0uc3p3rg81pus04c679i2541ts.org/
1    2    3    4