検索
ホームページウェブフロントエンドjsチュートリアルnode.jsとelasticsearchを使用して検索エンジンを構築します

Build a Search Engine with Node.js and Elasticsearch

この記事は、マーク・ブラウン、ビルダン・ソフト、モリッツ・クロガーによって査読されました。 SetePointのコンテンツを完璧にしてくれたSetePointのすべてのピアレビューアに感謝します!

Elasticsearchは、パフォーマンスが高く分散されているアーキテクチャにより、ますます人気が高まっているオープンソースの検索エンジンです。この記事では、その主要な機能を調べて、それを使用してnode.js検索エンジンを作成する方法をガイドします。

キーポイント

  • ElasticSearchは、Apache Lucene上に構築された高性能分散検索エンジンであり、主にリアルタイムのインデックス作成と検索データに使用されます。
  • システムはパターンフリーで、データ構造とタイプを自動的に検出でき、JSONのRESTFUL APIをHTTPで使用して多数の操作をサポートできます。
  • ElasticSearchは、ZIPファイルやHomeBrewなどのパッケージマネージャーを使用してメインオペレーティングシステムに簡単にインストールでき、Javaランタイム環境を実行する必要があります。
  • node.jsの公式Elasticsearchモジュールは、Elasticsearchの機能の統合をnode.jsアプリケーションと促進し、効率的なデータインデックス作成とクエリを可能にします。
  • ElasticSearchの重要な概念には、複雑なクエリ、フィルター、集約がデータを改良および分析できるようにするインデックス、タイプ、および検索が含まれます。
  • ElasticSearchはリアルタイム検索をサポートしています。つまり、新しくインデックス化されたデータをほぼすぐに検索できるため、最新情報に依存するアプリケーションの応答速度が向上します。
  • このチュートリアルは、node.jsでElasticsearchのセットアップ、さまざまなタイプの検索の実行、データ集約や提案などの高度な機能を使用する実用的な例とコードスニペットを提供します。

ElasticSearchの紹介

Elasticsearchは、高性能テキスト検索エンジンライブラリであるApache Luceneの上に構築されています。 ElasticSearchはデータストレージと検索を実行できますが、その主な目的はデータベースとして機能することではなく、検索エンジン(サーバー)であり、その主な目標は、データのリアルタイム統計をインデックス付け、検索、および提供することです。

ElasticSearchには、より多くのノードを追加して追加のハードウェアを活用することで、水平スケーリングを実現できる分散アーキテクチャがあります。数千のノードをサポートして、ペタバイトのデータを処理します。その水平スケーリングは、高可用性が高いことを意味し、ノードが失敗した場合にデータを再調整できます。

データをインポートした後、すぐに検索に使用されます。 ElasticSearchはスキーマフリーで、JSONドキュメントにデータを保存し、データ構造とタイプを自動的に検出できます。

ElasticSearchも完全にAPIを搭載しています。これは、HTTPのJSONデータを使用して、ほぼすべての操作を単純なRESTFUL APIを使用して実行できることを意味します。 node.jsを含む、ほぼすべてのプログラミング言語に多くのクライアントライブラリを提供します。このチュートリアルでは、公式のクライアントライブラリを使用します。

ElasticSearchは、ハードウェアとソフトウェアの要件の点で非常に柔軟です。推奨される生産環境は64GBのRAMであり、できるだけ多くのCPUコアですが、リソースに制約のあるシステムで実行して適切なパフォーマンスを取得できます(データセットがそれほど大きくないと仮定します)。この記事の例に従うには、2GBのメモリと単一のCPUコアを備えたシステムで十分です。

すべての主要なオペレーティングシステム(Linux、Mac OS、およびWindows)でElasticsearchを実行できます。これを行うには、Javaランタイム環境の最新バージョンをインストールする必要があります(「ElasticSearchのインストール」セクションを参照)。この記事の例に従うには、node.js(v0.11.0の後の任意のバージョン)とnpmもインストールする必要があります。

elasticsearch用語

ElasticSearchは独自の用語を使用します。これは、一般的なデータベースシステムとは異なります。以下は、一般的に使用されている用語とElasticsearchの意味のリストです。

index:この用語には、Elasticsearchの文脈に2つの意味があります。 1つ目は、データを追加する操作です。データが追加されると、テキストはタグ(単語など)に分割され、各タグはインデックス付けされます。ただし、インデックスは、すべてのインデックスデータが保存される場所も参照しています。基本的に、データをインポートすると、インデックスにインデックスが表示されます。データで何かを実行するたびに、インデックス名を指定する必要があります。

タイプ:Elasticsearchは、型と呼ばれるインデックス内のドキュメントのより詳細な分類を提供します。インデックス内の各ドキュメントには、タイプも必要です。たとえば、ライブラリインデックスを定義してから、複数のタイプのデータ(記事、書籍、レポート、プレゼンテーションなど)をインデックス化できます。インデックスはほぼ固定されているため、より多くのインデックスとタイプの少ないタイプではなく、より少ないインデックスとより多くのタイプを使用することをお勧めします。

検索:この用語は、あなたが思うと同じことを意味するかもしれません。さまざまなインデックスとタイプのデータを検索できます。 ElasticSearchは、用語、フレーズ、範囲、ファジー、さらには地理的データクエリなど、さまざまな種類の検索クエリを提供します。

フィルター:ElasticSearchを使用すると、さまざまな基準に基づいて検索結果をフィルタリングして、結果の範囲をさらに狭めることができます。ドキュメントのセットに新しい検索クエリを追加すると、依存関係に応じて順序が変更される場合がありますが、フィルターと同じクエリを追加すると、順序は同じままです。

集約:これらは、最小、最大、平均、合計、ヒストグラムなど、集約されたデータのさまざまな種類の統計を提供します。

提案:Elasticsearchは、入力テキストのさまざまな種類の提案を提供します。これらの提案は、用語やフレーズに基づいている可能性があり、提案さえ完了することができます。

elasticsearch

をインストールします

Elasticsearchは、Apache 2ライセンスで利用できます。インストールする前に、Java Runtime Environment(JRE)がコンピューターにインストールされていることを確認する必要があります。 ElasticSearchはJavaで書かれており、Javaライブラリに依存して実行されます。 Javaがシステムにインストールされているかどうかを確認するには、コマンドラインに次のように入力できます。

<code>java -version</code>

Javaの最新の安定したバージョンが推奨されます(執筆時点で1.8)。ここにシステムにJavaのインストールに関するガイドを見つけることができます。

次に、elasticsearchの最新バージョン(執筆時点で2.4.0)をダウンロードするには、ダウンロードページにアクセスしてzipファイルをダウンロードします。 ElasticSearchはインストールを必要としません。単一のzipファイルには、すべてのサポートされているオペレーティングシステムでプログラムを実行する完全なファイルセットが含まれています。ダウンロードされたファイルを解凍すると、完了です!さまざまなLinuxディストリビューション用のTARファイルやパッケージを取得するなど、ElasticSearchを実行するには、他にもいくつかの方法があります(こちらを参照)。

Mac OS Xを実行していて、HomeBrewをインストールしている場合は、Brew Install Elasticsearchを使用してElasticsearchをインストールできます。 HomeBrewは、実行可能ファイルをパスに自動的に追加し、必要なサービスをインストールします。また、単一のコマンドであるBrew Upgrade Elasticsearchでアプリケーションを更新するのにも役立ちます。

WindowsでElasticsearchを実行するには、減圧ディレクトリからbinelasticsearch.batを実行します。他のすべてのオペレーティングシステムについては、ターミナルから/bin/elasticsearchを実行します。この時点で、システムで実行する必要があります。

前述したように、ElasticSearchでできることはほとんどすべてをREST APIを介して実行できます。 ElasticSearchは、デフォルトでポート9200を使用します。必ず正しく実行するには、ブラウザにhttp:// localhost:9200/にアクセスしてください。実行中のインスタンスに関する基本的な情報が表示されます。

インストールとトラブルシューティングの詳細については、ドキュメントにアクセスできます。

グラフィックユーザーインターフェイス

ElasticSearchは、REST APIを通じてほぼすべての機能を提供し、グラフィカルユーザーインターフェイス(GUI)は付属していません。 APIおよびnode.jsを介して必要なすべての操作を行う方法については説明していますが、インデックスとデータに関する視覚情報、さらには高度な分析を提供するGUIツールがいくつかあります。

同じ会社によって開発された

Kibanaは、データのリアルタイムの要約と、いくつかのカスタム視覚化と分析オプションを提供します。 Kibanaは無料で、詳細なドキュメントがあります。

コミュニティは、Elasticsearch-Head、Elasticsearch GUI、さらにはElasticsearch Toolboxと呼ばれるChrome拡張機能など、他のツールも開発しました。これらのツールは、ブラウザでインデックスとデータを閲覧するのに役立ち、さまざまな検索や集計クエリを試すこともできます。これらのツールはすべて、インストールと使用のためのウォークスルーを提供します。

set node.js環境

ElasticSearchは、node.jsの公式モジュールをElasticsearchと呼ばれます。まず、モジュールをプロジェクトフォルダーに追加し、将来の使用のために依存関係を保存する必要があります。

<code>npm install elasticsearch --save</code>
次のように、スクリプトのモジュールをインポートできます。
<code>java -version</code>

最後に、ElasticSearchとの通信を処理するクライアントを設定する必要があります。この例では、127.0.0.1のIPアドレスと9200のポート(デフォルト設定)を使用して、ローカルマシンでElasticSearchを実行していると思います。

<code>npm install elasticsearch --save</code>

ログオプションにより、すべてのエラーが記録されます。この記事の残りの部分では、同じエスカリエントオブジェクトを使用してElasticSearchと通信します。ノードモジュールの完全なドキュメントはこちらから提供されています。

注:このチュートリアルのすべてのソースコードは、GitHubで入手できます。従うべき最も簡単な方法は、リポジトリをPCにクローンして、そこから例を実行することです。

<code>const elasticsearch = require('elasticsearch');</code>

データをインポート このチュートリアルでは、ランダムに生成されたコンテンツを含むアカデミック記事のデータセットを使用します。データはJSON形式で提供されており、データセットには1,000の記事があります。データのスタイルを表示するために、データセットのアイテムを以下に示します。

フィールド名は自明です。注意すべき唯一のことは、完全にランダムに生成されたドキュメント(100〜200段落を含む)が含まれているため、ボディフィールドがここには表示されないことです。ここで完全なデータセットを見つけることができます。
<code>const esClient = new elasticsearch.Client({
  host: '127.0.0.1:9200',
  log: 'error'
});</code>

ElasticSearchは個々のデータポイントをインデックス作成、更新、削除する方法を提供していますが、Elasticserchのバッチメソッドを使用してデータをインポートします。これは、大規模なデータセットの操作をより効率的に実行するために使用されます。

ここでは、bulkindex関数を呼び出し、ライブラリをインデックス名として、記事をタイプとして渡し、インデックスを作成するJSONデータを渡します。 bulkindex関数は、エスカリエントオブジェクトのバルクメソッドを順番に呼び出します。このメソッドは、ボディ属性をパラメーターとして使用するオブジェクトを使用します。ボディプロパティに提供される値は、操作ごとに2つのエントリを持つ配列です。最初のエントリでは、操作のタイプがJSONオブジェクトとして指定されています。このオブジェクトでは、インデックスプロパティが実行する操作(この場合はインデックスドキュメント)と、インデックス名、タイプ名、およびドキュメントIDを決定します。次のエントリは、ドキュメント自体に対応します。

<code>git clone https://github.com:sitepoint-editors/node-elasticsearch-tutorial.git
cd node-elasticsearch-tutorial
npm install</code>
将来的には、この方法で同じインデックスに他の種類のドキュメント(書籍やレポートなど)を追加できることに注意してください。各ドキュメントに一意のIDを割り当てることもできますが、これはオプションです。それを提供しない場合、ElasticSearchは各ドキュメントに一意のランダムに生成されたIDを割り当てます。

リポジトリをクローン化したと仮定すると、プロジェクトルートから次のコマンドを実行して、次のコマンドを実行してデータをElasticSearchにインポートできるようになりました。

データが正しくインデックス化されているかどうかを確認します

<code>{
    "_id": "57508457f482c3a68c0a8ab3",
    "title": "Nostrud anim proident cillum non.",
    "journal": "qui ea",
    "volume": 54,
    "number": 11,
    "pages": "109-117",
    "year": 2014,
    "authors": [
      {
        "firstname": "Allyson",
        "lastname": "Ellison",
        "institution": "Ronbert",
        "email": "Allyson@Ronbert.tv"
      },
      ...
    ],
    "abstract": "Do occaecat reprehenderit dolore ...",
    "link": "http://mollit.us/57508457f482c3a68c0a8ab3.pdf",
    "keywords": [
      "sunt",
      "fugiat",
      ...
    ],
    "body": "removed to save space"
  }</code>

ElasticSearchの主な機能は、そのほぼリアルタイム検索です。これは、ドキュメントがインデックス化されると、1秒以内に検索できることを意味します(こちらを参照)。データがインデックス化されたら、インデックスを実行してインデックス情報を確認できます。 クライアントのCATオブジェクトのメソッドは、現在実行中のインスタンスに関するさまざまな情報を提供します。インデックスメソッドには、すべてのインデックス、その健康、ドキュメントの数、およびディスク上のサイズがリストされています。 Vオプションは、CATメソッドの応答にタイトルを追加します。

上記のコードスニペットを実行すると、クラスターの健康を示すためにカラーコードを出力することに気付くでしょう。赤は、クラスターに問題があり、実行されていないことを示します。黄色はクラスターが実行されていることを示しますが、警告があり、緑はすべてが問題ないことを示します。ほとんどの場合(設定に応じて)、ローカルマシンで実行されるときに黄色の状態を取得します。これは、デフォルト設定にクラスターの5つのノードが含まれているが、ローカルマシンで実行されているインスタンスは1つだけです。このチュートリアルの目的のために、常に生産中の緑の状態を求めて努力する必要がありますが、イエローステートでElasticsearchを引き続き使用できます。

<code>java -version</code>

ダイナミックおよびカスタムマッピング先に述べたように、Elasticsearchはパターンレスです。これは、インポートする前にデータの構造を定義する必要がないことを意味します(SQLデータベースでテーブルを定義するのと同様)が、ElasticSearchは自動的に検出されます。ただし、スキーマレスと呼ばれているにもかかわらず、データ構造にはいくつかの制限があります。

ElasticSearchデータの構造をマッピングと呼びます。マッピングが存在しない場合、ElasticSearchはデータのインデックスを作成するときにJSONデータの各フィールドを調べ、そのタイプに基づいてマッピングを自動的に定義します。フィールドにマッピングエントリが既にある場合、追加された新しいデータが同じ形式に従うことが保証されます。それ以外の場合は、エラーが発生します。

たとえば、

{"key1":12}がインデックス化されている場合、elasticsearchはフィールドkey1を自動的に長くマッピングします。これで、{"key1": "value1"、 "key2": "value2"} index {"key1"、 "key1"、 "key2"}を試みると、フィールドkey1のタイプが長くなると予想されるため、エラーがスローされます。一方、オブジェクト{"key1":13、 "key2": "value2"}は問題なくインデックス化され、型文字列のkey2がマップに追加されます。

マップはこの記事の範囲を超えており、ほとんどの場合、自動マッピングはうまく機能します。 Mappingの詳細な議論を提供するElasticsearchドキュメントをチェックすることをお勧めします。

検索エンジンを構築します

データがインデックス化されたら、検索エンジンを実装できます。 ElasticSearchは、クエリを定義するために、

Query dsl

- それはJSONに基づいている query dsl と呼ばれる直感的なフルテキスト検索クエリ構造を提供します。検索クエリにはさまざまな種類がありますが、この記事では、より一般的なクエリのいくつかについて説明します。クエリDSLの完全なドキュメントは、こちらをご覧ください。

ここに示す各例にコードリンクを提供したことを忘れないでください。環境がセットアップされ、テストデータがインデックス化されたら、リポジトリをクローンしてマシンの例を実行できます。これを行うには、コマンドラインからノードfilename.jsを実行するだけです。

すべてのドキュメントを1つまたは複数のインデックス

に返します

検索を実行するには、クライアントが提供するさまざまな検索方法を使用します。最も簡単なクエリはmatch_allで、1つ以上のインデックスですべてのドキュメントを返します。次の例は、インデックスにすべての保存されたドキュメントを取得する方法を示しています(ソースコードへのリンク)。

<code>java -version</code>

メイン検索クエリはクエリオブジェクトに含まれています。後で見るように、このオブジェクトにさまざまな種類の検索クエリを追加できます。クエリごとに、検索オプションを含むオブジェクトの値を含むクエリタイプ(この例のmatch_all)を含むキーを追加します。インデックス内のすべてのドキュメントを返したいため、この例にはオプションはありません。

クエリオブジェクトに加えて、検索本体には、サイズやfromなどの他のオプションのプロパティを含めることもできます。サイズ属性は、応答に含まれるドキュメントの数を決定します。この値が存在しない場合、デフォルトで10個のドキュメントが返されます。 FROMプロパティは、返されたドキュメントの開始インデックスを決定します。これはページネーションに役立ちます。

検索API応答を理解してください

検索APIの応答を記録している場合(上記の例で結果)、多くの情報が含まれているため、最初は複雑に見える場合があります。

<code>npm install elasticsearch --save</code>

最高レベルでは、応答には、結果を見つけるのにかかったミリ秒数を表すテイク属性、timed_outが含まれます。関連するノードを提供するには、ステータスに関する情報(ノードクラスターとして展開されている場合)と、検索結果を含むヒットを提供します。

ヒットプロパティには、次のプロパティを備えたオブジェクトがあります。

    合計 - 一致の総数を指定します
  • max_score - 見つかったアイテムの最高スコア
  • ヒット - 見つかったアイテムを含む配列。ヒット配列の各ドキュメントには、インデックス、タイプ、ドキュメントID、スコア、およびドキュメント自体(_Source要素)があります。
非常に複雑ですが、良いニュースは、結果を抽出する方法を実装すると、検索クエリが何であれ、常に同じ形式で結果を取得することです。

また、ElasticSearchの利点の1つは、各マッチングドキュメントにスコアを自動的に割り当てることであることに注意してください。このスコアは、ドキュメントの関連性を定量化するために使用され、デフォルトでは、スコアの減少順に結果が返されます。 match_allを使用してすべてのドキュメントを取得する場合、スコアは意味がなく、すべてのスコアは1.0として計算されます。

マッチフィールドに特定の値を持つドキュメントさて、もっと興味深い例を見てみましょう。フィールドに特定の値を含むドキュメントを一致させるには、一致クエリを使用できます。以下は、一致クエリを備えた単純な検索本体です(ソースコードへのリンク)。 前述したように、最初に、検索タイプを含むクエリオブジェクトにエントリを追加します。この例で一致します。検索タイプオブジェクト内で、検索するドキュメントフィールドを識別します。ここにタイトルがあります。その中に、クエリ属性を含む検索に関連するデータを配置します。上記の例をテストした後、検索速度に驚かされるようになることを願っています。

上記の検索クエリは、タイトルフィールドがクエリ属性の単語と一致するドキュメントを返します。以下に示すように、一致の最小数を設定できます。
<code>const elasticsearch = require('elasticsearch');</code>
<code>java -version</code>

このクエリは、タイトルに少なくとも3つの指定された単語とドキュメントと一致します。クエリに3つ未満の単語がある場合、すべての単語がドキュメントと一致するようにタイトルに表示する必要があります。検索クエリに追加されたもう1つの便利な機能は、あいまいです。これは、ファジーマッチが同様のスペルを持つ用語を探すため、クエリの書き込み中にユーザーがエラーを入力する場合に便利です。文字列の場合、あいまいさの値は、各用語で許可された最大レビンシュタイン距離に基づいています。曖昧さのある例は次のとおりです。

<code>npm install elasticsearch --save</code>

複数のフィールドで検索

複数のフィールドで検索する場合は、Multi_Matchを使用してタイプを検索できます。これは一致するのと似ていますが、フィールドを検索クエリオブジェクトのキーとして使用する代わりに、検索するフィールドの配列であるフィールドキーを追加します。ここでは、タイトル、Authors.firstname、authors.lastname fieldsで検索します。 (ソースコードへのリンク)

<code>const elasticsearch = require('elasticsearch');</code>

Multi_Match Queryは、Miniminal_should_matchやファジネスなどの他の検索プロパティをサポートしています。 ElasticSearchは、複数のフィールドを一致させるためにワイルドカード( *など)をサポートするため、上記の例を['title'、 'Authors。 *name']に短縮できます。

完全なフレーズ

に一致します

ElasticSearchは、用語レベルで一致することなく、入力されたフレーズを正確に一致させることもできます。このクエリは、match_phraseと呼ばれる通常のマッチクエリの拡張機能です。 Match_Phraseの例を次に示します。 (ソースコードへのリンク)

<code>const esClient = new elasticsearch.Client({
  host: '127.0.0.1:9200',
  log: 'error'
});</code>

複数のクエリの組み合わせ

これまでのところ、この例では、要求ごとに1つのクエリのみを使用しています。ただし、ElasticSearchを使用すると、複数のクエリを組み合わせることができます。最も一般的な複合クエリはboolです。 Boolクエリは、4種類のキーを受け入れます。マスト、必須、およびフィルターです。名前が示すように、結果のドキュメントは、bustのクエリと一致する必要があります。は、und_notのクエリと一致できません。上記の各要素は、クエリ配列の形式で複数のクエリを受信できます。 以下では、新しいクエリタイプquery_stringを使用してbool queryを使用します。これにより、キーワードなどの高度なクエリを作成できます。 query_string構文の完全なドキュメントはこちらをご覧ください。さらに、スコープクエリ(ここに文書化)を使用して、フィールドを特定の範囲に制限できます。 (ソースコードへのリンク)

クエリは、用語1または
<code>git clone https://github.com:sitepoint-editors/node-elasticsearch-tutorial.git
cd node-elasticsearch-tutorial
npm install</code>
を含む著者の名前を返します。彼らの姓には項が含まれています。 、2012年または2013年に公開された文書。さらに、身体に特定のフレーズを含むドキュメントは、より高いスコアを取得し、結果の上部に表示されます(一致クエリは句にあるため)。

フィルター、集約および推奨事項

フィルター

通常、特定の基準に基づいて検索結果を改善することができます。 ElasticSearchは、フィルターを介してこの機能を提供します。私たちの記事データでは、検索が5年で公開されたもののみを選択するいくつかの記事を返品しているとしましょう。検索注文を変更せずに、検索結果の基準と一致しないものを単純にフィルタリングできます。

ブールクエリの必須句のフィルターと同じクエリの違いは、フィルターが検索スコアに影響を与えず、マストクエリが影響することです。検索結果が返され、ユーザーが特定の基準に基づいてフィルターをかけると、元の結果順序を変更するのではなく、結果から無関係なドキュメントを削除するだけです。フィルターは検索と同じ形式に従いますが、より一般的には、テキスト文字列ではなく明確な値のフィールドで定義されます。 ElasticSearchは、Bool Composite Searchクエリのフィルター句を介してフィルターを追加することをお勧めします。

上記の例を続けて、検索結果を2011年から2015年に公開された記事に制限するとします。これを行うには、元の検索クエリのフィルター部分に範囲クエリを追加するだけです。これにより、結果から不一致のドキュメントが削除されます。フィルタリングクエリの例は次のとおりです。 (ソースコードへのリンク)

<code>java -version</code>
重合

集約フレームワークは、検索クエリに基づいて、さまざまな集約データと統計を提供します。集約の2つのタイプはメトリックとグループ化であり、メトリック集約はドキュメントのセットでメトリックを追跡および計算し、グループ化された集約はバケツを構築し、それぞれがキーとドキュメント条件に関連付けられます。メトリック集約の例には、平均、最小、最大、合計、値カウントが含まれます。グループ化された集約の例には、範囲、日付範囲、ヒストグラム、および用語が含まれます。アグリゲーターの詳細な説明はこちらにあります。

集約は、それ自体が検索オブジェクトの本体に直接配置される集計オブジェクトの内側に配置されます。 Aggregatesオブジェクトでは、各キーはユーザーによってアグリゲーターに割り当てられた名前です。アグリゲーターの種類とオプションは、そのキーの値として配置する必要があります。次に、2つの異なるアグリゲーター、メトリックアグリゲーターとバケットアグリゲーターを見ます。メトリックアグリゲーターとして、データセットで最小年値(最古の投稿)を見つけようとします。バケットアグリゲーターの場合、各キーワードの発生数を見つけようとします。 (ソースコードへのリンク)

上記の例では、メトリックアグリゲーターmin_year(この名前は任意の名前にすることができます)に名前を付けます。これは、年間フィールドのminタイプの集約です。バケットアグリゲーターの名前はキーワードと名付けられており、キーワードフィールドで実行される用語タイプの集約です。集合体の結果は、応答の集約要素に含まれており、より深いレベルでは、定義された各アグリゲーター(min_yearおよびキーワードはこちら)とその結果を含みます。この例に対する部分的な応答を次に示します。

<code>npm install elasticsearch --save</code>

デフォルトでは、応答で最大10個のバケツが返されます。リクエストのフィールドの横にサイズキーを追加して、返されるバケットの最大数を決定できます。すべてのバケットを受け取る場合は、この値を0に設定します。

<code>const elasticsearch = require('elasticsearch');</code>

提案

ElasticSearchには、入力用語の交換または完了の提案を提供できる複数のタイプの提案者があります(こちらに記載されています)。ここでは、用語とフレーズの提案をチェックします。提案者という用語は、入力テキストの各用語のアドバイスを提供します(存在する場合)。フレーズの提案者は、入力テキストを完全なフレーズとして(用語に分割するのではなく)扱い、他のフレーズの提案(存在する場合)を提供します。提案APIを使用するには、node.jsクライアントのsuggestメソッドを呼び出す必要があります。これが用語の提案者の例です。 (ソースコードへのリンク)

<code>java -version</code>

リクエスト本体には、他のすべてのクライアントメソッドと一致して、検索のインデックスを決定するインデックスフィールドがあります。身体のプロパティには、提案を探しているテキストを追加し、(集約オブジェクトと同様に)各提案者(この場合はタイトルグスター)に名前を割り当てます。その価値は、提案者のタイプとオプションを決定します。この場合、タイトルフィールドに用語の提案者を使用し、タグごとの提案の最大数を5(サイズ:5)に制限しています。

Prossing APIの応答には、要求する各提案者のキーが含まれています。これは、テキストフィールドの用語数と同じサイズの配列です。この配列内の各オブジェクトには、テキストフィールドに提案が含まれているオプションオブジェクトがあります。以下は、上記のリクエストに対する部分的な応答です。

<code>npm install elasticsearch --save</code>
フレーズの提案を取得するには、上記と同じ形式に従って、提案者タイプをフレーズに置き換えることができます。次の例では、応答は上記と同じ形式に従います。 (ソースコードへのリンク)

<code>const elasticsearch = require('elasticsearch');</code>

さらに読み取り

Elasticsearchは、この記事の範囲をはるかに超えた幅広い機能を提供します。この記事では、その機能を高レベルで説明し、さらなる学習のために適切なリソースを参照しようとします。 ElasticSearchは非常に信頼性が高く、優れたパフォーマンスを持っています(例を実行するときにこれに気づいたことを願っています)。これは、コミュニティサポートの高まりと相まって、特にリアルタイムデータやビッグデータを処理する企業間で、業界でのElasticSearchの採用を増加させます。

ここで提供されている例を注意深く読んだ後、ドキュメントをチェックすることを強くお勧めします。それらは2つの主要なソースを提供します。1つはElasticSearchとその機能への参照であり、もう1つは実装、ユースケース、ベストプラクティスに焦点を当てたガイドです。また、node.jsクライアントの詳細なドキュメントをここで見つけることもできます。

すでにelasticsearchを使用していますか?あなたの経験は何ですか?それとも、これを読んだ後に試してみる予定ですか?以下のコメントで教えてください。

検索エンジンノードElasticSearch

についてのFAQ(FAQ)

ElasticSearchと他の検索エンジン(ElasticLunrやMinisearchなど)の違いは何ですか?

Elasticsearchは、強力で分散型のオープンソース検索分析エンジンです。大量のデータを処理し、リアルタイムの検索結果を提供するように設計されています。一方、ElasticLunrとMiniSearchは、JavaScriptの軽量クライアント検索ライブラリです。これらは小さなデータセット用に設計されており、ブラウザベースのアプリケーションでよく使用されます。 ElasticSearchは、分散検索、データ分析、機械学習機能などのより高度な機能を提供しますが、ElasticLunrとMinisearchは基本的な検索機能に使用しやすくなります。

node.jsアプリケーションにelasticsearchを実装する方法は?

node.jsアプリケーションでElasticSearchの実装には、いくつかのステップが含まれます。まず、NPMを使用してElasticSearchパッケージをインストールする必要があります。次に、ElasticSearchクライアントインスタンスを作成し、ElasticSearchサーバーに接続する必要があります。その後、クライアントのメソッドを使用して、ドキュメントのインデックス作成、データの検索、ElasticSearchクラスターの管理など、さまざまなアクションを実行できます。

ElasticSearchを使用してブラウザで検索エンジンを構築できますか?

ElasticSearchは主にサーバー側のアプリケーション向けに設計されていますが、node.jsサーバーの助けを借りてブラウザベースのアプリケーションで使用できます。サーバーは、ブラウザとElasticsearchサーバーの間のプロキシとして機能し、すべての検索要求と応答を処理できます。ただし、より単純なユースケースの場合、ElasticLunrやMiniSearchなどのクライアント検索ライブラリがより良い選択かもしれません。

ElasticSearchは他のNPM検索パッケージとどのように比較されますか?

Elasticsearchは、強力な機能とスケーラビリティのおかげで、NPMで最も人気のある検索パッケージの1つです。データのインデックス付け、検索、分析のためのAPIの包括的なセットを提供します。ただし、他のNPM検索パッケージよりも複雑でリソース集約型です。小さなプロジェクトに取り組んでいる場合、または単純な検索機能が必要な場合は、検索インデックスやJS-Searchなどの他のNPMパッケージがより適している場合があります。

JavaScriptを使用してシンプルなブラウザー検索エンジンを構築する方法は?

JavaScriptを使用したシンプルなブラウザー検索エンジンの構築には、データのインデックスの作成、検索機能の実装、検索結果の表示が含まれます。 ElasticLunrやMiniSearchなどのJavaScript検索ライブラリを使用して、このプロセスを簡素化できます。これらのライブラリは、データをインデックスおよび検索するための使いやすいAPIを提供し、サーバーの要件なしにブラウザで直接使用できます。

私のアプリで検索にElasticSearchを使用することの利点は何ですか?

ElasticSearchは、アプリケーションに検索機能を実装するための多くの利点を提供します。リアルタイムの検索結果を提供します。つまり、ドキュメントがインデックス化されると検索可能になります。また、複雑な検索クエリもサポートしており、複数の基準に基づいてデータを検索できます。さらに、ElasticSearchは非常にスケーラブルであり、パフォーマンスに影響を与えることなく大量のデータを処理できます。

ElasticSearchはデータインデックス作成をどのように処理しますか?

ElasticSearchは、データインデックスのために反転インデックスと呼ばれるデータ構造を使用します。これにより、検索クエリに一致するドキュメントをすばやく見つけることができます。ドキュメントがインデックス化されると、ElasticSearchがコンテンツを分析し、一意の単語のリストを作成し、ドキュメント内の位置に関する情報とともに単語を逆インデックスに保存します。

データ分析にElasticSearchを使用できますか?

はい、ElasticSearchは検索エンジンであるだけでなく、強力なデータ分析ツールでもあります。集約をサポートし、さまざまな方法でデータを集約および分析することができます。 ElasticSearchを使用して、平均、合計またはカウントの計算、最​​小値または最大値の検索、特定の条件に基づくグループ化などの複雑なデータ分析タスクを実行できます。

ElasticSearchはビッグデータアプリケーションに適していますか?

はい、Elasticsearchはビッグデータアプリケーションを処理するように設計されています。これは分散システムです。つまり、クラスターにノードを追加することで水平方向にスケーリングできます。これにより、大量のデータを処理し、重い負荷の下でも高速の検索結果を提供できます。さらに、ElasticSearchはシャードと複製をサポートしており、スケーラビリティと信頼性をさらに向上させます。

ElasticSearchアプリケーションのパフォーマンスを最適化する方法は?

ElasticSearchアプリケーションのパフォーマンスを最適化する方法はいくつかあります。まず、ノード、シャード、レプリカの数など、ElasticSearchクラスターを正しく構成する必要があります。次に、バッチインデックスを使用し、リフレッシュの無効化、および正しいアナライザーを使用して、インデックスプロセスを最適化する必要があります。最後に、クエリの代わりにフィルターを使用して、重い集約を避け、「説明」APIを使用してクエリの実行方法を理解することにより、検索クエリを最適化する必要があります。

以上がnode.jsとelasticsearchを使用して検索エンジンを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

独自のAjax Webアプリケーションを構築します独自のAjax Webアプリケーションを構築しますMar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10 jQueryの楽しみとゲームプラグイン10 jQueryの楽しみとゲームプラグインMar 08, 2025 am 12:42 AM

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

jQuery Parallaxチュートリアル - アニメーションヘッダーの背景jQuery Parallaxチュートリアル - アニメーションヘッダーの背景Mar 08, 2025 am 12:39 AM

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

Matter.jsを始めましょう:はじめにMatter.jsを始めましょう:はじめにMar 08, 2025 am 12:53 AM

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

jqueryとajaxを使用した自動更新Divコンテンツjqueryとajaxを使用した自動更新DivコンテンツMar 08, 2025 am 12:58 AM

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール