I.はじめに
検索機能は非常に一般的なアプリケーションの機能とオープンソースであるElasticsearchのフルテキスト検索エンジンのための選択
ElasticsearchがあるLuceneをベースと下分散検索サービスのLuceneオープンソース・ソフトウェア・ツールキットは直接使用できません
が、Elasticsearch当量は、そのされ、カプセル化して提供するRESTfulなスタイルのAPIマルチシャード(断片)も、データのセキュリティを確保する方法を提供します自動resharding機能
githubのと他の大規模なサイトも、その検索エンジンサービスとしてElasticsearchを使用します
Elasticsearchはすばやく検索し、データ・ストレージを大量に分析することができます
第二に、インストール
インストールドッカー道
最初のダウンロード画像Elasticsearch
# 从阿里云的仓库拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/elasticsearch/elasticsearch:6.7.0
その後、コンテナが起動する
Elasticsearchデフォルトの9200
ウェブ通信を分散する場合Elasticsearch各ノード間の通信用ポートを9300
ポート
# 启动容器
docker run -d -p 9200:9200 -p 9300:9300 --name ES01 02982be5777d
次に、ブラウザのIPアクセス:9200の
データがある場合は、正常に起動し、次のとおりです。
場合は、アクセスポート9200が表示されますができない場合
:別のブログのI参照仮想マシンのインストールElasticsearch・エラーのための完璧なソリューション:[1]:最大仮想メモリ領域VMを.max_map_count [65530]は、低すぎる増加
第三に、使用
Elasticsearchである[ ドキュメント]のために、それが中に記憶されていることを意味物体全体またはドキュメント
Elasticsearchだけでなく、ドキュメントおよびインデックス、それを取り出すことができるように、各文書のコンテンツストア
のElasticsearchにある文書をインデックス付けされた検索ソートおよびフィルタリング- -データのランクにだけではなく
、それは思考の全く異なる方法は、複雑なフルテキスト検索の原因をサポートするためにもElasticsearchデータである方法
Elasticsearch使用してJSONとして文書の(JavaScriptのオブジェクト表記)シリアル化形式を
ほとんどのプログラミング言語がサポートされており、それはシンプルで簡単、軽量かつクロスプラットフォームの簡単な利点を読み取るためのNoSQLの分野における標準フォーマットとなっているようにJSONがシリアライズ
基本的な概念:
保存されたデータはElasticsearchは[呼ば実施するために、インデックス ]が、文書のインデックスを作成する前に、文書が保存されている場所を決定する必要があります
(ここではインデックスがある動詞の
ドキュメントがされたインデックスに格納取得するために、インデックスに文書が、クエリは、
SQL文に似ていますINSERTキーワード)
クラスタは、[タイプ]の複数を含んでいてもよい、各インデックスに対応するElasticsearch [インデックス]の複数を含んでいてもよいです
[文献]それぞれ、複数のストレージのこれらの異なるタイプの文書を複数持っている[プロパティ]
(インデックスはここにある名詞では、従来のリレーショナル・データベースのようなデータベースは、リレーショナル文書を保存する場所です)
:比較のためにMySQLを使用している場合
- Elasticsearch インデックスのMySQLへの対応データベース
- Elasticsearch 型のMySQLの同等のテーブルを
- Elasticsearch 文書 MySQLのと同等のレコードを
- Elasticsearch プロパティ MySQLのと同等のフィールド
1、CRUD
①、アドオン
達成するために、追加実際には非常に簡単
に送信するだけで必要なPUT
文書に預金の種類を指定するには、指定されたインデックスにリクエストを
構文:
PUT请求 ----> ip:端口/索引名称/类型名称/编号
コンテンツ:
{
要添加的JSON数据
}
例:
PUT请求 ----> ip:端口/zjitc/student/1
{
"id" : "1",
"name" : "陈涛"
}
②は、get /クエリ
送信のみ同じ必要性GET
を要求取得:指定されたドキュメント
構文:
GET请求 ----> ip:端口/索引名称/类型名称/编号
例:
GET请求 ----> ip:端口/zjitc/student/1
③、削除
送信DELETE
する要求の削除指定された文書の
構文を:
DELETE请求 ----> ip:端口/索引名称/类型名称/编号
例:
DELETE请求 ----> ip:端口/zjitc/student/3
④、かどうかを判断するが
送るHEAD
かどうかを判断するための要求の有無:指定されたドキュメント
構文:
HEAD请求 ----> ip:端口/索引名称/类型名称/编号
例:
HEAD请求 ----> ip:端口/zjitc/student/3
場合はデータは返されませんが存在するデータが返された200
場合は何もありませんリターン404
⑤、更新
PUT
また、使用することができます更新するために、文書の
構文を:
PUT请求 ----> ip:端口/索引名称/类型名称/编号
コンテンツ:
{
JSON数据
}
例:
PUT请求 ----> ip:端口/zjitc/student/1
{
"id" : "1",
"name" : "王王涛"
}
2、高度な検索
①、検索全て
使用_search
例:
GET请求 ----> ip:端口/zjitc/student/_search
②、検索条件
コマンドライン構文
使用_search?q=属性名:属性值
例:
GET请求 ----> ip:端口/zjitc/student/_search?q=id:2
同様の結果が得点にSortedSetをRedisのを関連性に従って並べ替えることができます
クエリ式の構文
軽量検索(コマンドライン構文)は、検索の一時的なコマンドによって容易に行うことができるが、それは、独自の制限がある
Elasticsearchは[と呼ばれる豊かで柔軟なクエリ言語を提供クエリー式より堅牢で複雑なクエリを構築サポートしています]
単一の検索用語:
構文:
POST请求 ----> ip:端口/索引名称/类型名称/_search
コンテンツ:
{
"query" : {
"match" : {
"搜索条件key" : "搜索条件value"
}
}
}
例:
POST请求 ----> /zjitc/student/_search
{
"query" : {
"match" : {
"id" : "1"
}
}
}
複雑な検索(多基準検索):
フィルタクエリ結果にフィルタ追加して
構文を:
POST请求 ----> ip:端口/索引名称/类型名称/_search
コンテンツ:
{
"query" : {
"bool": {
"must": {
"match" : {
"首选搜索条件key" : "首选搜索条件value"
}
},
"filter": {
"range" : {
"次选搜索条件key" : { "判断符" : 次选搜索条件value }
}
}
}
}
}
例:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"name" : "涛"
}
},
"filter": {
"range" : {
"num" : { "gt" : 1 }
}
}
}
}
}
③、フルテキスト検索
長いターゲット・フィールドなどとして含まれている検索条件の値をチェックすることができる
構文を:
POST请求 ----> ip:端口/索引名称/类型名称/_search
コンテンツ:
{
"query" : {
"match" : {
"搜索条件key" : "搜索条件value"
}
}
}
例:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
④、フレーズ検索
完全一致の単語やフレーズの一連の
一致のみ「単語1」と「単語2」とフレーズ「単語1つの単語2」の形式で記録されていると、両方の次が含ま
構文:
POST请求 ----> ip:端口/索引名称/类型名称/_search
コンテンツ:
{
"query" : {
"match_phrase" : {
"搜索条件key" : "搜索条件value"
}
}
}
例:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"match_phrase" : {
"hobby" : "watch TV"
}
}
}
上記の例では趣味の時計テレビ文書に添付された属性値と一致する
かと時計はテレビと一致しない場合
⑤、検索を強調
検索結果のそれぞれにおいてテキスト断片のいくつかのハイライトされた文書は、クエリと一致する理由をユーザーに知らせるために、
構文を:
POST请求 ----> ip:端口/索引名称/类型名称/_search
コンテンツ:
{
"query" : {
"match_phrase" : {
"搜索条件key" : "搜索条件value"
}
},
"highlight": {
"fields" : {
"要高亮的属性名" : {}
}
}
}
例:
POST请求 ----> ip:端口/zjitc/student/_search
{
"query" : {
"match_phrase" : {
"name" : "涛"
}
},
"highlight": {
"fields" : {
"name" : {}
}
}
}