7

Logstash からデータが入ってきて、熱心に分析されています。基本的に、フィールドは、 、および"OS X 10.8"に分割されます。既存のデータのマッピングと再インデックスを変更するだけでよいことはわかっていますが、将来のデータでこの問題を回避するには、デフォルトのアナライザー (ElasticSearch または LogStash のいずれか) をどのように変更すればよいでしょうか?"OS""X""10.8"

具体的な解決策: 新しいクラスターに初めてデータを送信する前に、型のマッピングを作成しました。

IRC からの解決策:インデックス テンプレートを作成する

4

2 に答える 2

10

このページによると、アナライザーはクエリごと、フィールドごと、またはインデックスごとに指定できます。

index time、Elasticsearch は次の順序でアナライザーを検索します。

  • で定義されたアナライザーfield mapping
  • defaultインデックス設定で指定されたアナライザー。
  • standardアナライザー。

にはquery time、さらにいくつかのレイヤーがあります。

  • で定義されたアナライザーfull-text query
  • search_analyzerフィールド マッピングで定義された。
  • で定義されたアナライザーfield mapping
  • default_searchインデックス設定で指定されたアナライザー。
  • defaultインデックス設定で指定されたアナライザー。
  • standardアナライザー。

一方、このページは重要なことを示しています。

アナライザーは論理名で登録されます。その後、マッピング定義または特定の API から参照できます。何も定義されていない場合は、デフォルトが使用されます。何も導出できない場合にデフォルトで使用されるアナライザーを定義するオプションがあります。

したがって、カスタム アナライザーをデフォルトとして定義する唯一の方法は、事前定義されたアナライザーの 1 つ (この場合はdefaultアナライザー) をオーバーライドすることです。これは、アナライザーに任意の名前を使用できないことを意味します。名前を付ける必要があります。default

インデックス設定の簡単な例を次に示します。

{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0,
    "analysis": {
      "char_filter": {
        "charMappings": {
          "type": "mapping",
          "mappings": [
            "\\u200C => "
          ]
        }
      },
      "filter": {
        "persian_stop": {
          "type": "stop",
          "stopwords_path": "stopwords.txt"
        }
      },
      "analyzer": {
        "default": {<--------- analyzer name must be default
          "tokenizer": "standard",
          "char_filter": [
            "charMappings"
          ],
          "filter": [
            "lowercase",
            "arabic_normalization",
            "persian_normalization",
            "persian_stop"
          ]
        }
      }
    }
  }
}
于 2016-10-25T08:08:27.767 に答える