SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Elasticsearchと対話Botによる対話型の検索システム

Elasticsearchを用いた日本語検索システムの実装

Elasticsearchと対話Botによる対話型の検索システム 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

大量の文書を登録して検索する

 検索エンジン作成するにあたって大量の文書を登録する処理が必須となってきます。

 Elasticsearchには大量の文書を登録するための処理が用意されています。BulkというAPIを使用すれば高速に大量の文書の登録や削除が可能になります。JSON形式のファイルの登録が可能であり、それを圧縮した形式でも登録可能な点が強力です。

 今回はJSON形式の登録用のファイルを用意して、それをbulk処理で登録するシェルスクリプトを用意しました。

 用意したデータは下記です。2行ごとの構成になっており、1行目がどこに文書を登録するか、文書のタイプは何か、登録する際のIDは何かを指定しています。2行目で登録する文書の内容を実際に記述する形となっています。

リスト03 sample/test_bulk_article.json
{ "index" : { "_index" : "contents-2016", "_type" : "contents", "_id" : "2" } }
{ "body_text": "今回、作成したUbuntuでのDocker環境の構築方法です。他のディストリビューションやバージョンを試したい方は下記をご参照ください。"}
略

 用意したデータを下記のスクリプトで登録します。

リスト04 sample/elastic_regist_search_json.sh
#!/bin/bash
略
# -- Body ---------------------------------------------------------
#  SCRIPT LOGIC GOES HERE
# Regist json bulk
curl -XPOST http://localhost:9200/_bulk --data-binary \
            "@data/test_bulk_article.json" > /dev/null
sleep 10s
# Check the regist data
curl 'localhost:9200/_cat/indices?v'
# -----------------------------------------------------------------

 下記で実行します。

sh shell/elastic_regist_search_json.sh

 上記のスクリプトを実行した結果が下記です。分かりづらいのですが、登録されている文書が5に増えており、Bulk処理で用意したJSONのファイルを保存していることが分かります。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1772  100   596  100  1176  15433  30452 --:--:-- --:--:-- --:--:-- 30947
health status index             pri rep docs.count docs.deleted store.size pri.store.size
green  open   contents-20160111   1   0          5            0     8kb         8kb

 新たに登録した文書が検索できるか確かめてみます。

curl -XGET 'localhost:9200/contents-20160111/contents/_search?pretty' -d'
{
 "query":{"match":{"body_text":"大量にある文書"}}
}'

 下記が検索結果です。新たに登録した文書が検索可能になっていることが分かります。

{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.70825994,
    "hits" : [ {
      "_index" : "contents-20160111",
      "_type" : "contents",
      "_id" : "3",
      "_score" : 0.70825994,
      "_source" : {
        "body_text" : "Elastic社の元でOSSとして開発されてる大量にある文書の中から目的のワードを持つ文書を検索するための検索エンジンのことです。"
      }
    } ]
  }
}

最後に

 以上でElasticsearchを用いた日本語検索システムの紹介を終わります。作業は多いですが簡単に全文検索システムを作れるのは非常に魅力的です。この記事をきっかけに多くの方がElasticsearchを利用していただけるようになると幸いです。

 次回はスコアリングを改良して検索結果をチューニングするための手法を紹介します。

参考文献

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Elasticsearchと対話Botによる対話型の検索システム連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 大串 正矢(オオグシ マサヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9748 2016/10/31 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング