[fields]的映射定义具有不受支持的参数:[analyzer:case_sensitive]

时间:2018-06-08 13:49:59

标签: elasticsearch

在我的搜索引擎中,用户可以选择是否区分大小写。如果他们选择,查询将搜索fields which use a custom case-sensitive analyser。这是我的设置:

GET / candidate / _settings

{
    "candidates": {
        "settings": {
            "index": {
                "number_of_shards": "5",
                "provided_name": "candidates",
                "creation_date": "1528210812046",
                "analysis": {
                    "analyzer": {
                        "case_sensitive": {
                            "filter": [
                                "stop",
                                "porter_stem"
                            ],
                            "type": "custom",
                            "tokenizer": "standard"
                        }
                    }
                },
                ...
            }
        }
    }
}

所以我创建了一个名为case_sensitive的自定义分析器,取自this answer。我正在尝试按如下方式定义mapping

PUT / candidate / _mapping / candidate

{
    "properties": {
        "first_name": {
            "type": "text",
            "fields": {
                "case": { 
                    "type": "text",
                    "analyzer": "case_sensitive"
                }
            }
        }
    }
}

因此,在查询时,对于区分大小写的匹配,我可以这样做:

simple_query_string: {
    query: **text to search**,
    fields: [
        "first_name.case"
    ]
}

当我尝试定义mapping时,由于收到标题中描述的错误,我甚至没有进入最后一步。完整堆栈跟踪如下图所示:

enter image description here

我最初认为我的错误与this one类似,但我认为该问题仅与使用keyword令牌工具而非standard一个

有关

1 个答案:

答案 0 :(得分:1)

在这个映射定义中,我实际上是在尝试调整几个不同字段的映射,而不仅仅是first_name。其中一个字段的类型为long,这是抛出错误的映射定义。当我从映射定义中删除它时,它按预期工作。但是,我不确定为什么这种数据类型失败了?