在elasticsearch中,我们有一个具有对象数组的类型。当试图从Kibana访问时,我在访问
时遇到了一些不一致以下是我的映射摘录
{
"myIndex-2017.08.22": {
"mappings": {
"typeA": {
"properties": {
.
.
.
"Collection": {
"properties": {
.
.
.
"FileType": {
"type": "text"
}
}
}
}
}
}
}
}
这里我可以在Collection中有多个对象,即将其索引为数组。当我尝试使用一个FileType进行查询时,例如FileType:DOCX,然后我得到一些FileType为HTML的记录。
在深入研究时,我发现这是因为某些记录有两个集合元素,一个是FileType:DOCX,另一个是FileType:HTML。
为什么过滤工作方式如此?是否有任何其他方法可以过滤并仅获取FileType:DOCX并且不显示FileType:HTML。
正在运行ES 5.3。
答案 0 :(得分:3)
Elasticsearch将数组字段开箱即用,所以
{
"files" : [
{
"name" : "name1",
"fileType" : "doc"
},
{
"name" : "name2",
"fileType" : "html"
}
]}
变为:
{
"files.name" : [ "name1", "name2" ],
"files.fileType" : [ "doc", "html" ]
}
如果要在此数组中搜索对象本身,则必须在集合的映射中使用nested datatype:
{
"myIndex-2017.08.22": {
"mappings": {
"typeA": {
"properties": {
.
.
.
"Collection": {
"type": "nested",
"properties": {
.
.
.
"FileType": {
"type": "text"
}
}
}
}
}
}
}
}