弹性搜索"字"数据类型:映射不正确

时间:2016-08-17 06:19:06

标签: elasticsearch

我是弹性搜索的新手,过去几天我一直在尝试它。我无法进行正确的映射,因为我在映射中提到的所有数据类型都被映射到类型" 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中的数据类型。

1 个答案:

答案 0 :(得分:2)

这根本不是错误,你做得对。映射中type的概念以及type API中_analyze的概念不同。

_analyze API将返回您正在分析的字段中存在的所有令牌,并且每个令牌都键入“word”。这来自Lucene TypeAttribute类,你可以看到只有一个默认值"word"