前回のブログでは、luceneの基本的な概念と使用法を詳しく紹介しましたが、このブログでは、産業グレードのアプリケーションElasticSearchを紹介しました。それがシリーズの主題です。Elaticsearchはesと略され、esはオープンソースの高度に拡張可能な分散型全文検索エンジンであり、ほぼリアルタイムでデータを保存および取得できます。優れたスケーラビリティを備え、PB [1024TB]レベルを処理する何百ものサーバーに拡張できます。データ。esはJava開発を使用し、Luceneをコアとして使用してすべてのインデックス作成および検索機能を実装しますが、その目的は、シンプルなRESTful APIによってLuceneの複雑さを隠し、フルテキスト検索をシンプルにすることです。
- Elasticsearchには独自の分散調整管理機能があります
- Elasticsearch はjsonファイル形式のみをサポートします
- Elasticsearch自体はコア機能に重点を置いており、ほとんどの高度な機能はサードパーティのプラグインによって提供されます
- Elasticsearch は、リアルタイム検索アプリケーションを処理するときに非常に効率的です
上記のすべての機能は、Elasticsearchが本質的に効率的な分散型全文検索エンジンであることを示しています
ElasticSearchコアの概念
ElasticSearchはドキュメント指向の検索エンジンです。つまり、オブジェクトまたはドキュメント全体を保存できます。ただし、これは
ストレージであるだけでなく、各ドキュメントのコンテンツにインデックスを付けて検索できるようにします。Elasticsearchでは、(データの行と列ではなく)文書の索引付け、検索、ソート、およびフィルタリングを行うことができます。Elasticsearchは、従来のリレーショナルデータベースを次のように比較します。
カテゴリー | 図書館 | テーブル | 行 | カラム |
---|---|---|---|---|
関係データベース | データベース | テーブル | 行 | カラム |
ElasticSearch | 指数 | タイプ | 文書 | 田畑 |
ElasticsearchにはほぼリアルタイムのNRTがあり、Elasticsearchはほぼリアルタイムの検索プラットフォームです。つまり、ドキュメントのインデックス作成から検索できるようになるまで(通常は1秒以内)、わずかな遅延があります。
レベル | 概念 | ルセンの概念に対応 |
---|---|---|
インデックス | インデックスは、類似した特性を持つドキュメントのコレクションです。たとえば、顧客データのインデックス、製品カタログのインデックス、注文データのインデックスを作成できます。インデックスは名前(すべて小文字である必要があります)で識別され、このインデックスに対応するドキュメントのインデックス作成、検索、更新、削除を行う場合は、この名前を使用する必要があります。クラスターでは、任意の数のインデックスを定義できます。実際には****に対応 | インデックス |
タイプ | インデックスでは、1つ以上のタイプを定義できます。タイプはインデックスの論理的な分類/パーティションであり、そのセマンティクスは完全にあなた次第です。通常、タイプは、一連の共通フィールドを持つドキュメントに対して定義されます。たとえば、ブログプラットフォームを実行し、すべてのデータをインデックスに格納するとします。このインデックスでは、ユーザーデータ用に1つのタイプを定義し、ブログデータ用に別のタイプを定義できます。もちろん、コメントデータ用に別のタイプを定義することもできます。 | |
フィールド | データテーブルのフィールドに相当し、さまざまな属性に応じたドキュメントデータの分類と識別 | フィールドドメイン |
マッピング | マッピングとは、フィールドのデータ型、デフォルト値、アナライザー、インデックスを作成するかどうかなど、データの処理方法とルールにいくつかの制限を設定することです。これらはすべてマッピングで設定できる設定であり、その他はesの一部のデータです。ルール設定の使用はマッピングとも呼ばれます。最適なルールに従ってデータを処理すると、パフォーマンスが大幅に向上します。したがって、マッピングを確立する必要があり、パフォーマンスを向上させるためにマッピングを確立する方法を検討する必要があります。通常、各タイプにはマッピング情報が必要です | フィールドドメインの一部の属性構成 |
資料 | ドキュメントは、インデックスを作成できる情報の基本単位です。たとえば、特定の顧客のドキュメント、特定の製品のドキュメント、および特定の注文のドキュメントを作成することもできます。ドキュメントはJSON(Javascript Object Notation)形式で表現され、JSONはあらゆる場所に存在するインターネットデータ対話形式です。インデックス/タイプには、必要な数のドキュメントを保存できます。ドキュメントは物理的にインデックスに存在しますが、ドキュメントにはインデックスを付けるか、インデックスタイプを指定する必要があることに注意してください | ドキュメンテーション |
ElasticSearch環境の構成
ElasticSearchの公式アドレスは、ソフトウェアに直接ダウンロードできます。基本的に、ElasticSearchはサーバーにインデックスデータが保存されているサーバーです。プロジェクト構造から見ると、基本的に典型的なTomcatサーバーディレクトリである
ことがわかります:elasticsearch構成ファイルを変更:config / elasticsearch .yml、次の2つのコマンドを追加します。
http.cors.enabled: true
http.cors.allow-origin: "*"
この手順では、elasticsearchがクロスアクセスできるようにします。elasticsearch-headをインストールしない場合は、変更せずに直接起動できます。ウィンドウの下で直接batコマンドを使用して起動できます。起動が完了すると、ポップアップウィンドウがポップアップします。これもサーバースタイルであることが
わかります。9300はtcp通信インターフェイス[コードインターフェイスコールの使用]、9200はRestFulスタイルの通信インターフェイス[Http呼び出しアクセス]、
リラックスしたスタイルのアクセスを試すことができます。次の基本情報を確認できます。ElasticSearchのヘッドプラグインをインストールして、グラフィカルインターフェイスの効果を完了し、インデックスデータのビューを完了し、サーバーのグラフィカルインターフェイスをダウンロードすることができます[mysqlと同様] Navicatはデータベースからダウンロードされます]、headはgruntをグローバルコマンドとしてインストールします。GruntはNode.jsに基づくプロジェクトビルドツールであり、ブラウザーで実行され、ブラウザープラグインです。最初にnpmを実行し、npmのインストール後にコマンドを使用してGruntをインストールします。 、cmdコンソールで次の実行コマンドを入力します。npm install -g grunt-cli
elasticsearch-head-masterディレクトリに入り、headを開始し、コマンドプロンプトでコマンドを入力します。npm install
そしてgrunt server
、headが開始され、完了していることがわかります。以前にスパニングアクセスの導入が必要だった理由は、headのドメイン名がhttp://であるためです。 localhost:9100 /、およびesのドメイン名がhttp:// localhost:9200 /の場合、headでesにリクエストを送信します。
この動作は実際には、esにhttpリクエストを送信してインデックスを作成します。たとえば、クリックしてインデックスを作成します。実際、これはesへの安らかなリクエストです。リクエストアドレスを見るとわかります。パラメータは、デフォルトの5つのシャードと1つのコピーです。
ElasticSearchクライアント操作
インデックスのメンテナンスとデータのメンテナンスの2つの部分を含みます。
インデックスのメンテナンス
ヘッドの操作は実際にはリクエストの公開であることがわかるので、実際にはhttpリクエストを自分で直接送信できます。実際の開発では、elasticsearchのクライアントとして機能する主な方法は3つあります。
- 最初のタイプ、elasticsearch-headプラグイン:その本質は2番目のタイプと同じで、httpリクエストによっても実装されます
- 2番目の方法は、elasticsearchが提供するRestfulインターフェースを使用して直接アクセスすることです。最も一般的な方法は、postmanを使用することです。postman の使用におけるPostmanのベストプラクティスについてのブログがあるので、ここでは詳しく説明しません。postmanの使用方法を見てみましょう。 esの追加、削除、変更、チェック。
- 3つ目は、関連するjarパッケージの導入が必要なアクセスのためにelasticsearchが提供するAPIを使用し、tcpを使用して要求することです。
このパートでは、主にhttpリクエストを介して達成する方法を紹介し、Javaを介して操作する方法を次のブログで紹介します。
インデックスとマッピングを作成する
次に、先頭に移動して確認します。これは同じ効果です。作成は成功し、スライスパラメータは渡されません。デフォルトは5つのスライスと1つのコピーです。
インデックス作成後のマッピングの設定
tmlblog2では、インデックスを直接作成しましたが、マッピングマッピングは作成しませんでした。
この時点で、マッピングを作成するために追加しました。
作成が完了すると、tmlblog2にhelloのマッピング情報がすでにあることがわかります。
インデックスを削除
tmlblogインデックスを直接削除します。インデックス
が削除され、存在しないことがわかります。
ドキュメントのメンテナンス
最後の部分では、インデックスを維持する方法を紹介しました。この部分では、ドキュメント、つまりインデックス内のデータを維持する方法を紹介しました。
ドキュメントを作成
ドキュメントの作成は非常に簡単です。つまり、特定のタイプのドキュメントのデータを要求します。
ドキュメントレコードがデータベースに格納されていることがヘッドで確認できます。
ドキュメントを変更する
ドキュメントを作成するのと同じように、変更するドキュメントを見つけて、本文で新しいデータを使用します。変更
の効果を確認します。
ドキュメントを削除
対応するドキュメントを直接見つけて、削除要求を実行し
ます。先頭から確認できます。
クエリドキュメント
IDによるクエリ、用語によるクエリ、queryStringによるクエリ。
IDによるクエリ
Getメソッドを使用すると、idクエリを使用してドキュメントを検索し、ドキュメント情報を直接取得できます。
用語でクエリ
クエリされるデータのリストは次のとおりです
。tmlキーワードをクエリし、ヒットデータは次のとおりです。
queryStringによるクエリ
最初にヒットドメインを分析し、次にキーワードに基づいて検索します。
スコアに基づいて検索リストを取得できます
IKトークナイザーの使用
そのための3文字のサーバーが分かれているサービス、サービス、および標準トークナイザの下でデバイス、我々はデータを取得することはできません我々は取得時にサービスをするとき照会用語を。何も存在しないので、サービストークンは、Luceneのが学習と同じ、我々 IKトークナイザーを使用する必要があります。検索サーバーがデータにヒットする可能性があります。次に、IKをインストールし、IKパッケージを直接esプラグインに保存します。esを再起動して、ik トークナイザをロードします。IKは、ik_smartとik_max_wordの2つのトークン化アルゴリズムを提供します。ik_smartが最小のセグメンテーションで、ik_max_wordです。最高の粒度で
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "long",
"store": true,
"index":"not_analyzed"
},
"title": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"ik_max_word"
},
"content": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"ik_max_word"
}
}
}
}
}
最小切分
これが最小のセグメンテーションである場合、単語はセグメント化されないため、クエリ文字列検索[サービス]は検索できなくなります。クエリ文字列セグメンテーションのキーワードが含まれていないため、用語検索[サーバー]で検索できます。重要なのは、検索されたコンテンツがどのようにセグメント化されるかです。
最小切分
最小のセグメンテーションの場合は、単一の単語でセグメント化される可能性があり、細分性はより細かくなります。このとき、検索語[サービス]は、
[サービス]の
検索よりも少ない[サービス]の検索に検索できます。
このブログでは、ESの基本的な概念、基本的な操作と使用法、IKトークナイザの紹介と使用法を紹介し、次のブログでは、分散クラスタの使用法を公式に紹介しています。