在弹性搜索索引字段上添加映射

时间:2018-03-14 08:43:09

标签: elasticsearch

我想在elasticsearch文档中为搜索电子邮件字段添加anaylyser uax_url_email。但是,我收到了错误。

以下是我用来创建此索引的代码

  {
        "user": {
          "aliases": {},
          "mappings": {
            "user": {
              "properties": {
                "created": {
                  "type": "date"
                },
                "email": {
                  "type": "text",
                  "fields": {
                    "keyword": {
                      "type": "keyword",
                      "ignore_above": 256
                    }
                  }
                }
              }
            }
          },
          "settings": {
            "index": {
              "number_of_shards": "5",
              "provided_name": "user",
              "creation_date": "1521016015646",
              "analysis": {
                "analyzer": {
                  "my_analyzer": {
                    "tokenizer": "my_tokenizer"
                  }
                },
                "tokenizer": {
                  "my_tokenizer": {
                    "type": "uax_url_email",
                    "max_token_length": "255"
                  }
                }
              },
              "number_of_replicas": "1",
              "uuid": "RS96V9gFQbG5UmoQ2R_gLA",
              "version": {
                "created": "6010099"
              }
            }
          }
        }
      }

PUT / user / _mapping / email

{
  "mappings": {
    "_doc": {
      "properties": {
        "email": { 
          "type": "text",
          "fields": {
            "my_analyzer": { 
              "email":     "text",
              "analyzer": "my_analyzer"
            }
          }
        }
      }
    }
  }
}

我收到错误声明" root_cause":

{
  "error": {
    "root_cause": [
      {
        "type": "mapper_parsing_exception",
        "reason": "Root mapping definition has unsupported parameters:  [mappings : {_doc={properties={email={type=text, fields={my_analyzer={email=text, analyzer=my_analyzer}}}}}}]"
      }
    ],
    "type": "mapper_parsing_exception",
    "reason": "Root mapping definition has unsupported parameters:  [mappings : {_doc={properties={email={type=text, fields={my_analyzer={email=text, analyzer=my_analyzer}}}}}}]"
  },
  "status": 400
}

什么都没找到。我希望我的分析器和标记器在电子邮件领域工作,任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:0)

这应该有效:

PUT /user/_mapping/user
{
  "properties": {
    "email": {
      "type": "text",
      "fields": {
        "my_analyzer": {
          "type": "text",
          "analyzer": "my_analyzer"
        }
      }
    }
  }
}

您的错误是您认为索引类型为_doc,但查看您的映射时,索引类型为user。基本上,您的user索引的类型为user

命令格式为PUT /[INDEX_NAME]/_mapping/[TYPE_NAME] {"properties:" { "[FIELD_TO_BE_UPDATED]": {....} } }