LoginSignup
5
5

More than 5 years have passed since last update.

Vespaをインストールしてみる

Posted at

Vespa を使ってしてみる

Vespa ってなに?

Yahoo!が利用しているビッグデータ処理エンジンでOSSとして公開されています。

Yahoo!が高速クエリ処理などを行うために開発した大規模データセット向け処理エンジンで、Yahoo.com、Yahoo Japanなどで実際に利用されている。文章検索やランキングの生成・レコメンデーションを作るのにも使えるらしい

インストールした環境

  • MacOS X Sierra
  • Docker for mac Version 17.09.0-ce-mac35 (19611)

インストール方法

Quick Start の通りにやってみた

github から サンプルアプリをclone

$ git clone https://github.com/vespa-engine/sample-apps.git
$ export VESPA_SAMPLE_APPS=`pwd`/sample-apps

Vespa の Dockerコンテナを起動する

$ docker run --detach --name vespa --hostname vespa-container --privileged \
  --volume $VESPA_SAMPLE_APPS:/vespa-sample-apps --publish 8080:8080 vespaengine/vespa

コンテナが起動したらVespaが動作しているか確認します。

$ docker exec vespa bash -c 'curl -s --head http://localhost:19071/ApplicationStatus'

正しく動作していればこんなレスポンスが返ります。200 OKが返ってこなかったら暫くまって返ってくるまで待ちましょう。

HTTP/1.1 200 OK
Date: Fri, 20 Oct 2017 23:23:34 GMT
Content-Type: application/json
Content-Length: 8478

サンプルアプリをVespaにデプロイします

docker exec vespa bash -c '/opt/vespa/bin/vespa-deploy prepare /vespa-sample-apps/basic-search/src/main/application/ && \
    /opt/vespa/bin/vespa-deploy activate'

サンプルアプリが動作しているか確認します。

$ curl -s --head http://localhost:8080/ApplicationStatus

正しく動作していればこんなレスポンスが返ります。200 OKが返ってこなかったら暫くまって返ってくるまで待ちましょう。

HTTP/1.1 200 OK
Date: Fri, 20 Oct 2017 23:36:08 GMT
Content-Type: application/json
Transfer-Encoding: chunked

使ってみる

サンプルデータを入れる

$ curl -s -X POST --data-binary @${VESPA_SAMPLE_APPS}/basic-search/music-data-1.json \
    http://localhost:8080/document/v1/music/music/docid/1 | jq
$ curl -s -X POST --data-binary @${VESPA_SAMPLE_APPS}/basic-search/music-data-2.json \
    http://localhost:8080/document/v1/music/music/docid/2 | jq

 検索

$ curl -s http://localhost:8080/search/?query=bad | jq

結果

{
  "root": {
    "id": "toplevel",
    "relevance": 1,
    "fields": {
      "totalCount": 2
    },
    "coverage": {
      "coverage": 100,
      "documents": 2,
      "full": true,
      "nodes": 0,
      "results": 1,
      "resultsFull": 1
    },
    "children": [
      {
        "id": "id:music:music::1",
        "relevance": 0.254574922399675,
        "source": "music",
        "fields": {
          "sddocname": "music",
          "artist": "Michael Jackson",
          "title": "Bad",
          "duration": 247,
          "year": 1987,
          "documentid": "id:music:music::1"
        }
      },
      {
        "id": "id:music:music::2",
        "relevance": 0.05447959677335429,
        "source": "music",
        "fields": {
          "sddocname": "music",
          "artist": "Eminem",
          "title": "So Bad",
          "year": 2010,
          "documentid": "id:music:music::2"
        }
      }
    ]
  }
}
$ curl -s http://localhost:8080/search/?query=Eminem | jq
{
  "root": {
    "id": "toplevel",
    "relevance": 1,
    "fields": {
      "totalCount": 1
    },
    "coverage": {
      "coverage": 100,
      "documents": 2,
      "full": true,
      "nodes": 0,
      "results": 1,
      "resultsFull": 1
    },
    "children": [
      {
        "id": "id:music:music::2",
        "relevance": 0.1272874611998375,
        "source": "music",
        "fields": {
          "sddocname": "music",
          "artist": "Eminem",
          "title": "So Bad",
          "year": 2010,
          "documentid": "id:music:music::2"
        }
      }
    ]
  }
}

ドキュメントの取り出し

$ curl -s http://localhost:8080/document/v1/music/music/docid/2
{
  "fields": {
    "artist": "Eminem",
    "title": "So Bad",
    "year": 2010,
    "album": "Recovery"
  },
  "id": "id:music:music::2",
  "pathId": "/document/v1/music/music/docid/2"
}

コンテナの終了と削除

試し終わったら、コンテナを終了して削除します。

$ docker stop vespa
$ docker rm vespa
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5