我是弹性搜索的新手,过去几天我一直在尝试它。我无法进行正确的映射,因为我在映射中提到的所有数据类型都被映射到类型" word"而不是各自的类型。这是我做过的映射
POST my_index
{
"settings" : {
"analysis" : {
"analyzer" : {
"lowercase_analyzer" : {
"type" : "custom",
"tokenizer" : "keyword",
"filter" : ["lowercase"]
}
}
}
},
"mappings" : {
"my_type" : {
"properties" : {
"name" : {"type" : "string" ,"index" : "not_analyzed" },
"field0" : {
"properties" : {
"field1" : {"type" : "boolean" },
"field2" : {"type" : "string" },
"field3" : {"type" : "date", "format" : "yyyy-MM-dd HH:mm:ss SSSSSS" }
}
}
}
}
}
}
为了测试映射,我正在使用" _analyze" api如下
GET my_index/_analyze
{
"field" : "name",
"text" : "10.90.99.6"
}
给出了以下结果
{
"tokens": [
{
"token": "10.90.99.6",
"start_offset": 0,
"end_offset": 10,
"type": "word",
"position": 0
}
]
}
我期待"类型"在结果中"字符串"。但是我无法理解为什么它会返回类型" word"。当我使用_analyze api在嵌套字段中发布类型为boolean或时间戳的数据时,其他字段也会发生同样的情况。
GET my_index/_analyze
{
"field" : "field0.field1",
"text" : "true"
}
结果
{
"tokens": [
{
"token": "true",
"start_offset": 0,
"end_offset": 4,
"type": "word",
"position": 0
}
]
}
我的地图在哪里做错了。
此外,没有这样的"字" elastic search reference api中的数据类型。
答案 0 :(得分:2)
这根本不是错误,你做得对。映射中type
的概念以及type
API中_analyze
的概念不同。
_analyze
API将返回您正在分析的字段中存在的所有令牌,并且每个令牌都键入“word”。这来自Lucene TypeAttribute
类,你可以看到只有一个默认值"word"