Well,不要刷屏了

ES索引字段设计问题

Elasticsearch | 作者 gqzdev | 发布于2020年09月29日 | 阅读数:2507

最近在做一个全文检索的功能,涉及到的内容还比较多。

主要是不太清楚怎么设计字段,

比如field1,field2,field4,field5, 这五个字段都需要参与检索,如下:
{
"mappings": {
"idx_test": {
"properties": {
"id": {
"type": "keyword"
},
"field1": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"field2": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"field3": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"field4": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"recordTime": {
"type": "date"
},
"updateTime": {
"type": "date"
},
"fileuploadId": {
"type": "keyword"
},
"flag": {
"type": "keyword"
},
"isDelete": {
"type": "keyword"
}
}
}
}
}
还是只创建一个字段content,在logstash同步时包含(filed1+filed2+filed3+filed4)
{
"mappings": {
"idx_test": {
"properties": {
"id": {
"type": "keyword"
},
"content": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"recordTime": {
"type": "date"
},
"updateTime": {
"type": "date"
},
"fileuploadId": {
"type": "keyword"
},
"flag": {
"type": "keyword"
},
"isDelete": {
"type": "keyword"
}
}
}
}
}
这两种做法,不知道那种合理、性能好?

如果其中一个字段filed2更新了,这两种情况那种好些。
个人认为,还得请教大家:
主要是
方法一:只会更新filed2字段的分词,并重新创建索引么?

方法二:会更新整个content中的分词,并重新创建索引?
 
还有考虑后期的可扩展性等!

希望大家帮忙看下,怎么设计好!谢谢

主要是不知道怎么设计,那些字段
 
gqzdev-2020-09-29_15-23-55.png gqzdev-2020-09-29_15-27-11.png
已邀请:

Fisher - 鱼仔

赞同来自:

可以用 copy to
把 多个 filed 的字段映射到一个字段里去
每次数据重新写入 底层的分词索引都会重新写入更新的

liuyeye

赞同来自:

字段单独创建,搜索则使用多字段查询,更新也单独更新,这种设计应该更好吧~

pony_maggie - 公众号:犀牛饲养员的技术笔记

赞同来自:

使用copy_to或者单字符串多字段查询

要回复问题请先登录注册