在我的搜索引擎中,用户可以选择是否区分大小写。如果他们选择,查询将搜索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
时,由于收到标题中描述的错误,我甚至没有进入最后一步。完整堆栈跟踪如下图所示:
我最初认为我的错误与this one类似,但我认为该问题仅与使用keyword
令牌工具而非standard
一个
答案 0 :(得分:1)
在这个映射定义中,我实际上是在尝试调整几个不同字段的映射,而不仅仅是first_name
。其中一个字段的类型为long
,这是抛出错误的映射定义。当我从映射定义中删除它时,它按预期工作。但是,我不确定为什么这种数据类型失败了?