Columnコラム

Elasticsearchの検索クエリを書いてみよう!
全文検索、絞り込み、重み付け、Excel/Word……

2020年12月20日

ご相談・無料お見積り

オープンソースの検索エンジンとして高シェアを獲得し、今やデファクトになったと言っても過言ではないElasticsearch。本記事では、これからElasticsearchを使いたいという方のために、基礎知識や初歩的なクエリの使い方、また、大規模環境での注意点などを説明します。

Elasticsearchの強みとは

最初にElasticsearchの優位性や、選ぶべき理由について整理しておきましょう。昨今では、AWS(Amazon Web Services) やMicrosoft Azureのネイティブサービスとしても採用され、シェアを拡大し続けている検索エンジンであり、デファクト化はさらなるスピード感で進んでいます。

Elastic Stackのプロダクト

  • Kibana

    Elasticsearchデータの可視化ツール。Elastic Stackの制御が可能。クエリの負荷追跡、アプリ内部のリクエストフローの把握を行う。

  • Logstash

    サーバーサイドデータ処理パイプライン。形式や複雑さを問わず、データを動的に投入、変換し、格納庫(スタッシュ)に送信。

  • Beats

    データシッピングに特化したプラットフォーム。何百、何千ものマシンからLogstashやElasticsearchにデータを転送。

コミュニティによる豊富な派生プロダクト

オープンソースであるElasticsearchには、コミュニティから派生したプロダクトが数多く用意されています。公開当初は検索エンジンのみの提供でしたが、現在では、Logstash(データパイプライン)、Beats(データシッパー)、Kibana(データ可視化ツール)などの強力な関連プロダクトがラインナップされています。これらは、Elasticsearchを核とした「Elastic Stack」という一連のソフトウェア群としてまとめられています。
Elasticsearchの活性化したコミュニティには、ユーザが望むプロダクトを次々に生み出す体制が整っており、将来の変化や新たなニーズへの対応力という面でも期待できます。

柔軟な検索

完全一致検索、論理演算を用いた検索、ワイルドカードを用いた検索など、様々な検索が可能です。柔軟なAPIが豊富に用意されているのも、高シェアのオープンソースならではのメリット。また、数十億件といったレベルの膨大なデータを複雑化させずに扱うことができ、運用も非常に簡易です。

Elasticsearch 検索機能の例

  • 完全一致検索

    指定キーワードと語順まで一致するコンテンツを検索

  • 論理演算を
    用いた検索

    AND、OR、NOTのような条件付き検索

  • ワイルドカードを
    用いた検索

    ワイルドカードや正規表現を用いた検索

  • 類似語検索・
    あいまい検索

    スペルが類似したコンテンツを検索

  • 複合検索

    論理演算やワイルドカードなどを組み合わせて検索

スモールスタートと拡張性

Elasticsearchの特徴の1つには、初心者も気軽にスモールスタートできるという簡単導入が挙げられます。まずは、無償版をダウンロードし、手持ちのPCにインストールするだけで準備は完了です。一般的な有償ツールの場合には、問い合わせ・デモ・購入・セットアップ……、などと多くの手順やコストがかかります。そこで、初期投資なしで、「とにかく使ってみる」ことができるのは、やはり無償版ならではのメリットでしょう。
しかも、Elasticsearchは、クラスタ構成上で動作することが前提とされており、容易に拡張することが可能です。

検索クエリの使い方

それでは、Elasticsearchのクエリの書き方をいくつか紹介していきましょう。まずは、基礎的な検索方法。さらに、企業内ニーズの高いバイナリファイルを含めた検索方法についての参考例です。

① 全文検索

基礎的な全文検索のクエリです。例えば、インデックスから価格表を見つけたいという場合(「価格」で検索)。

 GET /test_index/_search/ { "query": { "term": { "title":"価格" } } } 

② 条件付き検索

様々な条件による高度な検索が簡単に実行できます。

●絞り込み検索

検索結果が多すぎたら、さらに期間、範囲など、さらに条件を付与して絞り込み(バイナリ検索)を行っていきます。

 GET /test_index/_search { "query": { "bool": { "must": { "query_string": { "query": "価格", "default_field": "title", "boost": 1 } }, "filter": { "range": { "last_modified": { "gte":"now/d-1y", "lte": "now/d" } } } } } } 

●検索結果の重み付け

ブーストさせたい(タイトルに対して重み付けを行いたい)場合は以下を参照してください。

 GET /test_index/_search/ { "query": { "function_score":{ "query":{ "bool": {"should": [ {"match": {"title": { "query": "価格", "boost": 3 }}}, {"match": {"content": { "query": "価格", "boost": 1.5 }}} ]} } } } } 

③ バイナリファイルの検索方法

プラグインとしてオフィスファイルを解析するOSSやクローラを組み込むことで、Excel、Word、PDFなども含む、様々なバイナリファイルの検索が透過的に行えます。

 GET /test_index/_search { "query": { "bool": { "should": [ { "query_string": { "query": "価格", "default_field": "title", "boost": 2 } }, { "query_string": { "query": "価格", "default_field": "content", "boost": 1 } } ] } } } 

大規模環境でElasticsearchを利用する際の注意点

エンタープライズユーザが、Elasticsearchを利用するには、いくつかの課題をクリアする必要があります。大規模環境で特に問題となるのがデータの点在化です。企業内では、ファイルサーバをはじめ、様々な場所に価値あるデータが分散して保存されています。これらはさらに、レガシーシステムとなった複数のソリューション、様々な手法で管理され、横断検索するには相応の仕組みが必要になります。しかも、このような環境における権限情報は、各システムが独自の仕組みで保有しており、検索結果の閲覧権限に、どう反映させるかが課題になります。

また、規模が大きくなればなるほど、検索のためのインデックス作成に時間がかかるため、これを解消する必要も出てきます。

ナレッジ検索ソリューション「aslead Search」

「aslead Search」は、Elasticsearchの導入・運用をトータルでサポートするソリューションです。数々の開発プロジェクトで培ったNRIのノウハウを凝縮した、業務コンサルティングや環境構築を通じ、企業の課題解決を幅広く支援しています。

例えば、「点在化したエンタープライズ特有のデータの問題」に対して、「aslead Search」は、データを漏れなく取得するためのソリューションを用意しています。Webページ、ファイルサーバはもちろん、Excel、Wordといったバイナリデータも容易に横断検索することが可能です。また、Active Directoryなど企業内のユーザ管理システムと連携した閲覧権限の管理も行えます。
大規模環境においてインデックス作成に時間がかかる問題については、「aslead Search」の差分クローリングも有効です。

「aslead Search」は、Elasticsearchやその派生プロダクトだけではカバーしきれない領域を補い、より快適かつ効果的な活用を実現するためのソリューションです。
「aslead Search」の全体概要や機能について、詳しくは以下よりご確認ください。

Elasticsearchの詳細に関しては、製品ページをご覧ください

Elasticsearch製品ページはこちら

お問い合わせ

Elasticsearch に関するご相談は、下記よりお気軽にお問い合わせください。

簡易フォームでお問い合わせ   チャットBotでお問い合わせ ※個人情報は、お問い合わせ対応に利用致します。
お問い合わせ