序章
エラスティックサーチとは
ElasticSearch
ShortES
はApache Lucene
ビルドベースで开源搜索引擎
、現在最も人気のある企业级搜索引擎
. Lucene本身就可以被认为迄今为止性能最好的一款开源搜索引擎工具包
ですが、lucene の API は比較的複雑で、深い検索理論が必要です。実際のアプリケーションに統合することは困難です。ES是采用java语言编写,提供了简单易用的RestFul API,开发者可以使用其简单的RestFul API,开发相关的搜索功能,从而避免lucene的复杂性
.
コアアイデア
索引
索引とは、類似した特性を持つ文書の集まりです。たとえば、製品データのインデックス、注文データのインデックス、およびユーザー データのインデックスを作成できます。インデックスは名前 (すべて小文字にする必要があります) で識別され、このインデックス内のドキュメントのインデックス作成、検索、更新、および削除を行う場合は、この名前を使用する必要があります。
地図
マッピングとは、ドキュメントとドキュメントに含まれるフィールドの格納方法とインデックス作成方法を定義するプロセスです。デフォルトの構成では、ES は挿入されたデータに基づいてマッピングを自動的に作成するか、手動でマッピングを作成できます。マッピングには、主にフィールド名、フィールド タイプなどが含まれます。
書類
ドキュメントは、インデックスに格納されたデータの一部です。ドキュメントは、索引付けできる最小単位です。ES のドキュメントは、軽量の JSON 形式のデータで表されます。
基本操作
索引
- ES のインデックスには
green
、(正常)、yellow
(インデックスが利用可能、危険)、red
(インデックスが利用不可)というヘルス ステータスがあります。 - デフォルトでは、ES はインデックスの作成時にバックアップ インデックスとインデックスの
primary
インデックスを作成します。
作成
1. インデックスを作成する
PUT /索引名
⚠️注意:
- デフォルトでは、ES はインデックスの作成時にバックアップ インデックスとインデックスの
primary
インデックスを作成します。 - デフォルトは
yellow
2. インデックスを作成してインデックスの断片化を構成する
PUT /goods
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
- この時点で、インデックスのステータスは緑色です
⚠️注意事項:
ElasticSearch 5.x より前のバージョンでは、以前のバージョンの文字列型ではなく、テキストとキーワードを文字列型として使用します。
- 文字列 - テキスト: フルテキスト インデックス作成に使用されます。このタイプのフィールドはトークナイザーによってセグメント化され、最終的にインデックスの構築に使用されます。
- 文字列キーワード: 単語のセグメンテーションはなく、フィールドの完全な値のみを検索でき、フィルタリングにのみ使用されます
インデックスが作成されたがマッピング結果が設定されていない場合、文字列タイプのドキュメントが挿入され、フィールドはデフォルトでマッピングされtext
、keyword
タイプされます
POST /test/_doc
{
"name":"黄凯宇"
}
ElasticSearch はデフォルトでマッピングを作成します
{
"test" : {
"mappings" : {
"properties" : {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
このマッピングに基づいて、Filed
フィールドの全文検索を実行できるだけでなく、フィールドを介した単語の分割なしでキーワード検索Filed.keyword
とデータ集計を実現できます。
お問い合わせ
GET /_cat/indices?v
消去
DELETE /索引名
DELETE /* # *代表通配符,代表所有索引
地図
インデックスでフィールド名とフィールド タイプを指定します。通常、実際の開発環境では、マッピングは手動で作成されます。これはビジネス シナリオに沿ったものです。
作成
- 文字列型: keyword (キーワード、キーワード)、text (テキストの一部)
- 数値型: 整数長
- 10 進型: float double
- ブール型: ブール
- 日付タイプ: 日付
PUT /products
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1
},
"mappings": {
"properties": {
"id":{
"type": "integer"
},
"title":{
"type": "keyword"
},
"price":{
"type": "double"
},
"create_at":{
"type": "date"
},
"description":{
"type": "text"
}
}
}
}
お問い合わせ
インデックスのマッピングをクエリする
GET /索引名/_mapping
書類
追加
ドキュメント操作を追加_—_手動で指定_id
POST /products/_doc/1
{
"id":1,
"title":"小浣熊",
"price":0.5,
"created_at":"2022-04-08",
"description":"小浣熊真好吃"
}
自動生成_id
#添加文档操作 自动生成id pD5UB4ABiB8dDekOnyy9
POST /products/_doc/
{
"id":2,
"title":"猪猪侠",
"price":0.5,
"created_at":"2022-04-08",
"description":"5毛钱一包"
}
チェック
ID に基づくクエリ
GET /索引名/_doc/id
消去
IDに基づいて削除
DELETE /索引名/_doc/id
更新する
元のドキュメントを削除し、再度追加します (更新後に更新されたフィールドのみが残ります)。
PUT /索引名/_doc/id
{
"字段名":"更新后值"
}
オリジナルに基づいて文書を更新する
POST /索引名/_doc/id/_update
{
"doc":{
"字段名":"更新后值"
}
}
バッチ操作
- ドキュメントの内容がどんなに複雑であっても、1 行に収める必要があり、改行することはできません。
バッチ増加
POST /products/_doc/_bulk
{"index":{"_id":2}}
{"id":2,"title":"泡面","price":4,"created_at":"2022-04-08","description":"泡面真难吃"}
{"index":{"_id":3}}
{"id":3,"title":"玉米肠","price":5,"created_at":"2022-04-08","description":"玉米肠真好吃"}
一括追加・更新・削除
POST /products/_doc/_bulk
{"index":{"_id":4}}
{"id":4,"title":"沙拉","price":6,"created_at":"2022-04-09","description":"不错不错"}
{"update":{"_id":3}}
{"doc":{"title":"玉米肠+蛋"}}
{"delete":{"_id":2}}