我使用以下内容通过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。
答案 0 :(得分:3)
由于错误消息描述自定义分析器(例如my_analyzer
)在映射中不是index
选项的有效值。根据{{3}},它可以采用的唯一值是
否强>
不要将此字段值添加到索引中。使用此设置,该字段 将无法查询。
<强> not_analyzed 强>
将字段值作为单个术语添加到索引不变。这是 除字符串外,支持此选项的所有字段的默认值 领域。 not_analyzed字段通常与术语级查询一起使用 用于结构化搜索。
<强>分析强>
此选项仅适用于字符串字段 默认。首先分析字符串字段值以转换 然后,将字符串转换成术语(例如,单个单词的列表) 索引。在搜索时,查询字符串通过(通常) 相同的分析器生成与格式相同的格式的术语 指数。正是这个过程实现了全文搜索。
如果您想为字段设置自定义分析器,请使用documentation选项
示例:
{
"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
}
}
}
}
}