我使用以下命令test通过PUT请求创建索引:
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。
由于错误消息描述了自定义分析仪,例如 my_analyzer不是index映射中选项的有效值。根据文档,它只能采用的值是
my_analyzer
index
没有 不要将此字段值添加到索引中。使用此设置,该字段将不可查询。 not_analyzed 将字段值不变地添加到索引中,作为一项。这是所有支持此选项的字段(字符串字段除外)的默认设置。not_analyzed字段通常与术语级查询一起用于结构化搜索。 分析 此选项仅适用于字符串字段,这是默认设置。首先分析字符串字段值,以将字符串转换为术语(例如,单个单词的列表),然后对其进行索引。在搜索时,查询字符串(通常)通过同一分析器传递,以生成与索引中的格式相同的术语。正是这个过程使全文搜索成为可能。
没有
不要将此字段值添加到索引中。使用此设置,该字段将不可查询。
not_analyzed
将字段值不变地添加到索引中,作为一项。这是所有支持此选项的字段(字符串字段除外)的默认设置。not_analyzed字段通常与术语级查询一起用于结构化搜索。
分析
此选项仅适用于字符串字段,这是默认设置。首先分析字符串字段值,以将字符串转换为术语(例如,单个单词的列表),然后对其进行索引。在搜索时,查询字符串(通常)通过同一分析器传递,以生成与索引中的格式相同的术语。正是这个过程使全文搜索成为可能。
如果要为字段设置自定义分析仪,请使用分析仪选项
例:
{ "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 } } } } }