使用参数直接放置过滤器会导致错误

o2gm4chl  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(390)

因此,我一直在尝试添加带有参数的唯一令牌过滤器,而不在我的自定义分析器中创建单独的令牌过滤器。
根据文档,一个带有参数的令牌过滤器的示例不需要创建单独的令牌过滤器:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-length-tokenfilter.html#analysis-长度tokenfilter analyze ex
根据文档,一个带有参数的令牌过滤器的示例不需要创建单独的令牌过滤器:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-unique-tokenfilter.html

PUT pokemon
{
  "settings": 
  {
    "analysis": 
    {
      "analyzer": 
      {
        "deba_analyzer": 
        {
          "char_filter": ["html_strip"],
          "tokenizer": "uax_url_email",
          "filter": ["lowercase","stop","kstem",{"type": "unique","only_on_same_position": true}]
        }
      }
    }
  },
  "mappings": 
  {
    "properties": 
    {
      "name": 
      {
        "type":"text"
      }
    }
  }
}

然而,直截了当地说,这给了我一个错误:

"reason" : "Failed to load settings from [{\"analysis\":{\"analyzer\":{\"deba_analyzer\":{\"filter\":[{\"only_on_same_position\":true,\"type\":\"unique\"}],\"char_filter\":[\"html_strip\"],\"tokenizer\":\"uax_url_email\"}}}}]",
"caused_by" : {
  "type" : "illegal_state_exception",
  "reason" : "only value lists are allowed in serialized settings"
}
qv7cva1a

qv7cva1a1#

即使您附加的令牌筛选器链接也指定了 unique 单独过滤 filter 你也需要这样做。换句话说,分析仪的 filter 数组只接受
具有默认设置的内置筛选器的名称
或需要单独定义的自定义筛选器的名称。
所以用这个:

PUT pokemon
{
  "settings": {
    "analysis": {
      "analyzer": {
        "deba_analyzer": {
          "char_filter": [
            "html_strip"
          ],
          "tokenizer": "uax_url_email",
          "filter": [
            "lowercase",
            "stop",
            "kstem",
            "my_unique_filter"                <--
          ]
        }
      },
      "filter": {
        "my_unique_filter": {                 <--
          "type": "unique",
              "only_on_same_position": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "analyzer": "deba_analyzer",          <--
        "type": "text"
      }
    }
  }
}

别忘了指定精心创建的分析器——如果不指定,它将被注册,但不会应用于任何字段。
编辑
这个 _analyze 示例中的api允许详细地指定过滤器,但是 PUT api根本没有。

相关问题