mapper_parsing_exception 在 elasticsearch 中创建索引时用于自定义分析器?

mapper_parsing_exception for a custom analyzer while creating index in elasticsearch?

我通过 PUT 请求创建了一个名为 test 的索引,使用:

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
                }
            }
        }
    }
}

但是这个returns出现以下错误:

{
  "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。

由于错误消息描述了自定义分析器,例如 my_analyzer 不是映射中 index 选项的有效值。根据 documentation,它可以采用的唯一值是

no

Do not add this field value to the index. With this setting, the field will not be queryable.

not_analyzed

Add the field value to the index unchanged, as a single term. This is the default for all fields that support this option except for string fields. not_analyzed fields are usually used with term-level queries for structured search.

analyzed

This option applies only to string fields, for which it is the default. The string field value is first analyzed to convert the string into terms (e.g. a list of individual words), which are then indexed. At search time, the query string is passed through (usually) the same analyzer to generate terms in the same format as those in the index. It is this process that enables full text search.

如果您想为字段设置自定义分析器,请使用 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
                }
            }
        }
    }
}