他のアプリケーションにオートコンプリート機能を提供する小さなアプリを play2 と elasticsearch で作成しました。私のelasticsearchインスタンスを本番環境に移行する時が来ました.
マッピング:
curl -XPUT 'http://127.0.0.1:9200/auto_complete/?pretty=1' -d '
{
"mappings": {
"search_word": {
"_all": {
"enabled": false
},
"properties": {
"id": {
"type": "string"
},
"word": {
"fields": {
"ngrams": {
"type": "string",
"analyzer": "custom_ngram"
},
"full": {
"type": "string",
"search_analyzer": "custom_full",
"index_analyzer": "custom_full"
}
},
"type": "multi_field"
},
"word_type": {
"type": "string"
}
}
}
},
"settings": {
"analysis": {
"filter": {
"customnGram": {
"max_gram": 50,
"min_gram": 2,
"type": "edgeNGram"
}
},
"analyzer": {
"custom_ngram": {
"filter": [
"standard",
"lowercase",
"customnGram"
],
"type": "custom",
"tokenizer": "standard"
},
"custom_full": {
"filter": [
"standard",
"lowercase"
],
"type": "custom",
"tokenizer": "standard"
}
}
}
}
}
'
あなたのためのいくつかのテストデータ:
curl -XPOST 'http://127.0.0.1:9200/_bulk?pretty=1' -d '
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "vvs", "word_type":"STRONG_SEARCH_WORD"}
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "och VVS ab", "word_type":"WEAK_SEARCH_WORD"}
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "vvs och rörjouren", "word_type":"NAME"}
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "vvs & rörjouren", "word_type":"NAME"}
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "rot och vvs", "word_type":"NAME"}
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "vvsjouren", "word_type":"NAME"}
{"index" : {"_index" : "auto_complete", "_type" : "search_word"}}
{"word" : "vvs-jouren", "word_type":"NAME"}
'
テスト クエリ:
curl -XGET 'http://127.0.0.1:9200/auto_complete/search_word/_search?pretty=1' -d '
{
"query": {
"bool": {
"should": [
{
"text": {
"search_word.ngrams": {
"operator": "and",
"query": "vvs"
}
}
},
{
"text": {
"search_word.full": {
"boost": 1,
"query": "vvs"
}
}
}
]
}
}
}
'
テスト時にインスタンスをデフォルト モードで実行しています。現在、私は約100万のドキュメントを持っています。
私が行った場合:
curl http://127.0.0.1:9200/auto_complete/_stats?pretty=1
私は得る:
{
"auto_complete": {
"primaries": {
"docs": {
"count": 971133,
"deleted": 0
},
"store": {
"size": "224.6mb",
"size_in_bytes": 235552784,
"throttle_time": "0s",
"throttle_time_in_millis": 0
},
"indexing": {
"index_total": 971126,
"index_time": "4m",
"index_time_in_millis": 242450,
"index_current": 0,
"delete_total": 0,
"delete_time": "0s",
"delete_time_in_millis": 0,
"delete_current": 0
},
"get": {
"total": 0,
"time": "0s",
"time_in_millis": 0,
"exists_total": 0,
"exists_time": "0s",
"exists_time_in_millis": 0,
"missing_total": 0,
"missing_time": "0s",
"missing_time_in_millis": 0,
"current": 0
},
"search": {
"query_total": 45,
"query_time": "1.1s",
"query_time_in_millis": 1152,
"query_current": 0,
"fetch_total": 35,
"fetch_time": "50ms",
"fetch_time_in_millis": 50,
"fetch_current": 0
}
},
"total": {
"docs": {
"count": 971133,
"deleted": 0
},
"store": {
"size": "224.6mb",
"size_in_bytes": 235552784,
"throttle_time": "0s",
"throttle_time_in_millis": 0
},
"indexing": {
"index_total": 971126,
"index_time": "4m",
"index_time_in_millis": 242450,
"index_current": 0,
"delete_total": 0,
"delete_time": "0s",
"delete_time_in_millis": 0,
"delete_current": 0
},
"get": {
"total": 0,
"time": "0s",
"time_in_millis": 0,
"exists_total": 0,
"exists_time": "0s",
"exists_time_in_millis": 0,
"missing_total": 0,
"missing_time": "0s",
"missing_time_in_millis": 0,
"current": 0
},
"search": {
"query_total": 45,
"query_time": "1.1s",
"query_time_in_millis": 1152,
"query_current": 0,
"fetch_total": 35,
"fetch_time": "50ms",
"fetch_time_in_millis": 50,
"fetch_current": 0
}
}
}
}
私は構成を読みましたが、私が望むのはある種のチェックリストです:
- ログファイルのパスを変更する
- インデックスは X のように見えるため、-Xmx と -Xms を X と Y に設定する必要があります。
- インデックスは X のように見えるため、X ノードと Y レプリカを使用する必要があります
- クエリ内のすべてのプリティを削除します
- 最も使用頻度の高いクエリについては、ウォームアップする必要があります
- _all フィールド セット "_all": {"enabled": false} を使用しない場合
- ?
ここで私が探しているのは、本番環境に移行したときの話と、インデックスをスムーズに実行するためにどのような構成を行ったかです。私や、本番環境に移行しようとしている人へのヒントはありますか?