索引付けされたJSONドキュメントの全文検索

この項では、セキュリティなしで簡単だが完全な例を実行するステップを示します。本番設定では、通常、Oracle NoSQL DatabaseとElasticsearchクラスタの両方は個別のノードで実行する必要がありますが、わかりやすくするために、これらのステップは単一ノードで実行します。また、環境でElasticsearchバージョン2のクラスタがすでに実行されている場合は、次で使用するElasticsearch単一ノード・クラスタのかわりに、このクラスタを自由に使用できます。最後に、特定の環境にあわせてトークン(ディレクトリの場所、バージョン番号など)の一部を変更する必要がある場合があります。

  1. Elasticsearchバージョン2をダウンロード、インストールおよび実行します。

    tarファイルhttps://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.6/elasticsearch-2.4.6.tar.gzをダウンロードし、ディレクトリ/opt/esに配置します。

    cd /opt/es
    tar xzvf elasticsearch-2.4.6.tar.gz
    ln –s elasticsearch-2.4.6 elasticsearch
    export JAVA_HOME=/usr/lib/jvm/java8 
    /opt/es/elasticsearch/bin/elasticsearch 
            -Dnetwork.host=localhost
            --cluster.name kv-es-cluster 
            --node.name localhost

    ノート:

    Elasticsearchバージョン2では、Java 8が必要です。そのため、Java 8をインストールし、Java 8のホーム・ディレクトリを指すようにJAVA_HOME環境を設定する必要があります。
  2. KVLiteを使用して、kvstoreという名前のOracle NoSQL Databaseストアをデプロイします。

    Oracle NoSQL Databaseをディレクトリ/opt/ondbにインストールし、システムの/tmpディレクトリに対する書込み権限があると仮定した場合は、次のコマンドをコマンドラインから実行します。

    java –jar /opt/ondb/kv/lib/kvstore.jar kvlite 
      –root /tmp/kvroot 
      –host localhost 
      –port 5000 
      –store kvstore 
      –secure-config disable
  3. Oracle NoSQL Database管理CLIを起動します。

    別のコマンド・ウィンドウから、次のコマンドを実行します。

    java –jar /opt/ondb/kv/lib/kvstore.jar runadmin 
      –host localhost 
      –port 5000 
      –store kvstore
  4. ロードするJSONドキュメントを含むファイルをインストールします。

    ~/examples/es/docsなどのディレクトリで、senator-info.jsonという名前のファイルを作成し、サンプル: JSONドキュメントの配列に示されたサンプル・ファイルに示すような1つ以上のJSONドキュメントを移入します。サンプル: JSONドキュメントの配列に示す書式と同じ書式で、作成するファイルを書式設定するようにしてください。

  5. LoadJsonExampleプログラム(または同様のプログラム)をコンパイルし、実行します。

    ~/examples/es/srcなどのディレクトリで、サブディレクトリes/tableを作成し、ディレクトリ~/examples/es/src/es/tableLoadJsonExample.javaという名前のファイルを作成します。ファイル~/examples/es/src/es/table/LoadJsonExample.javaを作成したら、LoadJsonExampleプログラム・ソースに示されたソース・コード(または同様の機能を備えたソース)を追加します。

    LoadJsonExample.javaプログラムが作成されたら、別のコマンド・ウィンドウから次を実行します。

    cd ~/examples/es/src
    
    javac –classpath /opt/ondb/kv/lib/kvstore.jar:src 
      examples/es/table/LoadJsonExample.java 
    
    java –classpath /opt/ondb/kv/lib/kvstore.jar:src 
      es.table.LoadJsonExample 
      –store kvstore 
      –host localhost 
      –port 5000 
      –file ~/examples/es/docs/senator-info.json 
      -table exampleJsonTable

    ノート:

    LoadJsonExampleプログラム・ソースに示されているLoadJsonExampleプログラムのソース・コードは、重要なJSONコンテンツをOracle NoSQL表にロードするための便利なメカニズムを提供するためのものにすぎません。同様の機能を提供する独自のプログラムを自由に記述してください。
  6. NoSQL表にロードされるJSONデータに対してテキスト索引を作成します。

    表が正常に作成され、目的の表データが移入されたことを確認したら、管理CLIから次を実行します。

    kv-> plan register-es 
      –clustername kv-es-cluster 
      –host localhost 
      –port 9200 
      –secure false 
      -wait
    
    kv-> execute 'CREATE FULLTEXT INDEX jsonTxtIndex ON exampleJsonTable ( 
      jsonField.current{"type":"boolean"}, 
      jsonField.party{"type":"string","analyzer":"standard"}, 
      jsonField.duties.committe{"type":"string"}, 
      jsonField.contrib{"type":"double"})'; 
  7. Elasticsearchで索引付けされたデータに対して全文検索問合せを実行します。

    最初に、目的の索引がElasticsearchで予想どおりに作成されていることを確認するには、コマンドラインから次を実行します。

    curl –X GET 'http://localhost:9200/_cat/indices'
    
    yellow open ondb.kvstore._checkpoint ...
    yellow open ondb.kvstore.examplejsontable.jsontxtindex ...

    Elasticsearchによって各索引のステータスが黄色でレポートされます。このようになるのは、Elasticsearchクラスタが単一ノード・クラスタとしてデプロイされたためです。

    Oracle NoSQLでElasticsearch用に構成されるマッピングを確認するには、次を実行します。

    curl –X GET 'http://localhost:9200/ondb.kvstore.examplejsontable.jsontxtindex/_mapping?pretty'

    Elasticsearchで索引付けされたexampleJsonTableからすべてのドキュメントを表示するには、次を実行します。

    curl –X GET 'http://localhost:9200/ondb.kvstore.examplejsontable.jsontxtindex/_search?pretty'

    最後に、caucusがProgressiveまたはHuman Rightsの議員である、献金の合計が500万から1500万ドルである現在の民主党上院議員をすべて検索するには、次のコマンドを実行します。

    curl –X GET 
      'http://localhost:9200/ondb.kvstore.examplejsontable.jsontxtindex/_search?pretty' 
      '-d {query":{"bool":{
        "must":{"match":{"jsonField.party":"Democrat"}},
        "must":{"match":"jsonField.current":"true"}},
        "must":{"range":{"jsonField.contrib":{"gte":"5000000.00","lte":15000000.00"}}},
        "must":"match":{"jsonField.duties.caucus":"Progressive Human Rights"}}}}}'