2

次を使用して、リクエストをtest介して名前を付けたインデックスを作成します。PUT

PUT http://localhost:9250/test
{
    "settings": {
        "analysis": {
            "char_filter": {
                "&_to_and": {
                    "type": "mapping",
                    "mappings": ["& => and"]
                }
            },
            "filter": {
                "my_stopwords": {
                    "type":       "stop",
                    "stopwords": ["the", "a"]
                }
            },
            "analyzer": {
                "my_analyzer": {
                    "type":         "custom",
                    "char_filter":  ["html_strip", "&_to_and"],
                    "tokenizer":    "standard",
                    "filter":       ["lowercase", "my_stopwords"]
                },
                "folding": {
                    "token_filters": ["lowercase", "asciifolding"],
                    "tokenizer": "standard",
                    "type": "custom"
                }
            }
        }
    },
    "mappings": {
        "tweet": {
            "dynamic": "strict",
            "properties": {
                "author": {
                    "type": "string",
                    "index": "my_analyzer",
                    "store": true
                },
                "text": {
                    "type": "string",
                    "index": "folding",
                    "store": true
                },
                "timestamp": {
                    "type": "date",
                    "format": "yyyy-MM-dd'T'HH:mm:ssZ",
                    "store": true
                }
            }
        }
    }
}

しかし、これは次のエラーを返します。

{
  "error": {
    "root_cause": [
      {
        "type": "mapper_parsing_exception",
        "reason": "wrong value for index [my_analyzer] for field [author]"
      }
    ],
    "type": "mapper_parsing_exception",
    "reason": "Failed to parse mapping [tweet]: wrong value for index [my_analyzer] for field [author]",
    "caused_by": {
      "type": "mapper_parsing_exception",
      "reason": "wrong value for index [my_analyzer] for field [author]"
    }
  },
  "status": 400
}

私が送信しているjsonは有効なようです。このエラーの理由は何ですか?

ES 2.2.0 を使用しています。

4

1 に答える 1

4

エラー メッセージは、マッピングのオプションmy_analyzerに対して有効な値ではないなどのカスタム アナライザーを説明し ています。ドキュメントindexに従って取ることができる唯一の値は次のとおりです。

番号

このフィールド値をインデックスに追加しないでください。この設定では、フィールドはクエリ可能になりません。

未分析

フィールド値を変更せずに、単一の用語としてインデックスに追加します。これは、文字列フィールドを除く、このオプションをサポートするすべてのフィールドのデフォルトです。not_analyzed フィールドは通常、構造化検索の用語レベルのクエリで使用されます。

分析した

このオプションは、デフォルトである文字列フィールドにのみ適用されます。文字列フィールドの値は、まず文字列を用語 (個々の単語のリストなど) に変換するために分析され、次にインデックスが作成されます。検索時に、クエリ文字列は (通常は) 同じアナライザーに渡され、インデックス内の用語と同じ形式で用語が生成されます。全文検索を可能にするのはこのプロセスです。

フィールドにカスタム アナライザーを設定する場合は、analyzerオプションを使用します。

例:

{
    "settings": {
        "analysis": {
            "char_filter": {
                "&_to_and": {
                    "type": "mapping",
                    "mappings": ["& => and"]
                }
            },
            "filter": {
                "my_stopwords": {
                    "type":       "stop",
                    "stopwords": ["the", "a"]
                }
            },
            "analyzer": {
                "my_analyzer": {
                    "type":         "custom",
                    "char_filter":  ["html_strip", "&_to_and"],
                    "tokenizer":    "standard",
                    "filter":       ["lowercase", "my_stopwords"]
                },
                "folding": {
                    "token_filters": ["lowercase", "asciifolding"],
                    "tokenizer": "standard",
                    "type": "custom"
                }
            }
        }
    },
    "mappings": {
        "tweet": {
            "dynamic": "strict",
            "properties": {
                "author": {
                    "type": "string",
                    "analyzer": "my_analyzer",
                    "store": true
                },
                "text": {
                    "type": "string",
                    "analyzer": "folding",
                    "store": true
                },
                "timestamp": {
                    "type": "date",
                    "format": "yyyy-MM-dd'T'HH:mm:ssZ",
                    "store": true
                }
            }
        }
    }
}
于 2016-03-01T20:17:31.680 に答える