8

他のアプリケーションにオートコンプリート機能を提供する小さなアプリを 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
            }
        }
    }
}

私は構成を読みましたが、私が望むのはある種のチェックリストです:

  1. ログファイルのパスを変更する
  2. インデックスは X のように見えるため、-Xmx と -Xms を X と Y に設定する必要があります。
  3. インデックスは X のように見えるため、X ノードと Y レプリカを使用する必要があります
  4. クエリ内のすべてのプリティを削除します
  5. 最も使用頻度の高いクエリについては、ウォームアップする必要があります
  6. _all フィールド セット "_all": {"enabled": false} を使用しない場合
  7. ?

ここで私が探しているのは、本番環境に移行したときの話と、インデックスをスムーズに実行するためにどのような構成を行ったかです。私や、本番環境に移行しようとしている人へのヒントはありますか?

4

1 に答える 1

2

このブログ投稿で「ELASTICSEARCH PRE-FLIGHT CHECKLIST」を見つけることができます。

http://asquera.de/opensource/2012/11/25/elasticsearch-pre-flight-checklist/

基本構成、メモリ設定、名前解決などをカバーしています。

于 2013-01-04T17:32:57.157 に答える