【问题标题】:Error while creating an index on Elasticsearch with custom analyzer使用自定义分析器在 Elasticsearch 上创建索引时出错
【发布时间】:2016-12-12 13:31:40
【问题描述】:

我正在尝试使用自定义默认分析器创建索引。 我已经检查了以下问题:

但他们没有解决问题。

这是我的架构:

put /emails
{
   "mappings": {
      "email": {
         "analyzer": "lkw",
         "properties": {
            "createdOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "data": {
               "type": "object",
               "dynamic": "true"
            },
            "from": {
               "type": "string",
               "store": true
            },
            "id": {
               "type": "string",
               "store": true
            },
            "sentOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "sesId": {
               "type": "string",
               "store": true
            },
            "subject": {
               "type": "string",
               "store": true,
               "analyzer": "standard"
            },
            "templates": {
               "properties": {
                  "html": {
                     "type": "string",
                     "store": true
                  },
                  "plainText": {
                     "type": "string",
                     "store": true
                  }
               }
            },
            "to": {
               "type": "string",
               "store": true
            },
            "type": {
               "type": "string",
               "store": true
            }
         }
      },
      "event": {
         "_parent": {
            "type": "email"
         },
         "analyzer": "lkw",
         "properties": {
            "id": {
               "type": "string",
               "store": true
            },
            "origin": {
               "type": "string",
               "store": true
            },
            "time": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "type": {
               "type": "string",
               "store": true
            },
            "userAgent": {
               "type": "string",
               "store": true
            }
         }
      }
   },
   "settings": {
      "analysis": {
         "analyzer": {
            "lkw": {
               "tokenizer": "keyword",
               "filter": [
                  "lowercase"
               ],
               "type": "custom"
            }
         }
      }
   }
}

当我执行上面的命令时,我得到了这个错误:

{
       "error": {
          "root_cause": [
             {
                "type": "mapper_parsing_exception",
                "reason": "Root mapping definition has unsupported parameters:  [analyzer : lkw]"
             }
          ],
          "type": "mapper_parsing_exception",
          "reason": "Failed to parse mapping [event]: Root mapping definition has unsupported parameters:  [analyzer : lkw]",
          "caused_by": {
             "type": "mapper_parsing_exception",
             "reason": "Root mapping definition has unsupported parameters:  [analyzer : lkw]"
          }
       },
       "status": 400
    }

【问题讨论】:

  • 您是否希望将您的lkw 分析器应用于所有没有特定分析器的string 字段?
  • 是的,就是这个想法
  • 既然你只有几个字符串字段,为什么不简单地在你需要的地方指定你的lkw分析器,就像你为standard所做的那样?
  • 我试过了。我得到同样的错误。

标签: elasticsearch elasticsearch-2.0


【解决方案1】:

由于您只有几个字符串字段,我建议您只需在需要的位置指定 lkw 分析器,就像您为 standard 所做的那样:

PUT /emails
{
   "mappings": {
      "email": {
         "properties": {
            "createdOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "data": {
               "type": "object",
               "dynamic": "true"
            },
            "from": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "id": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "sentOn": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "sesId": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "subject": {
               "type": "string",
               "store": true,
               "analyzer": "standard"
            },
            "templates": {
               "properties": {
                  "html": {
                     "type": "string",
                     "store": true,
                     "analyzer": "lkw"
                  },
                  "plainText": {
                     "type": "string",
                     "store": true,
                     "analyzer": "lkw"
                  }
               }
            },
            "to": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "type": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            }
         }
      },
      "event": {
         "_parent": {
            "type": "email"
         },
         "properties": {
            "id": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "origin": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "time": {
               "type": "date",
               "store": true,
               "format": "strict_date_optional_time||epoch_millis"
            },
            "type": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            },
            "userAgent": {
               "type": "string",
               "store": true,
               "analyzer": "lkw"
            }
         }
      }
   },
   "settings": {
      "analysis": {
         "analyzer": {
            "lkw": {
               "tokenizer": "keyword",
               "filter": [
                  "lowercase"
               ],
               "type": "custom"
            }
         }
      }
   }
}

【讨论】:

  • 我会将此作为正确答案。你知道为什么另一种方法不起作用吗?
  • 因为这不是指定要用于字段的分析器的正确方法。
  • 试图了解我做错了什么,因为我在其他索引上设置了默认分析器。
  • 您只需在索引设置中调用它default 即可。
  • 我发现这是一个重大更改 1.x => 2.x elastic.co/guide/en/elasticsearch/reference/2.0/… 感谢您的帮助!
猜你喜欢
  • 2013-08-16
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 2015-01-12
  • 1970-01-01
  • 2015-03-04
  • 2020-12-27
相关资源
最近更新 更多