我使用mysql存储用户数据,并通过Elasticsearch搜索数据。对于mysql,我有一个用户定义的字段,该字段可以存储JSON格式的数据。
这样的示例数据:
data1 =
{
"name" : "test1",
"age": 10,
"user_defined": {
"a" : "aaa",
"b" : "bbb",
"c" : "ccc",
.....
}
}
data2 =
{
"name" : "test2",
"age": 20,
"user_defined": {
"d" : "ddd",
"e" : "eee",
"f" : "fff",
.....
}
}
对于user_defined字段,键的数量不固定,值的类型都是字符串,我希望每个键都可以搜索,如何定义映射?如何通过Elasticsearch搜索此类数据?
任何人都有好主意?
答案 0 :(得分:1)
您可以将user_defined
的映射定义为"type": "object"
,如下所示:
PUT your_index
{
"mappings": {
"your_type": {
"properties": {
"name": {
"type": "string"
},
"age": {
"type": "integer"
},
"user_defined": {
"type": "object"
}
}
}
}
}
此后,您可以使用Query DSL
轻松索引文档并进行搜索POST your_index/_search
{
"query": {
"match" : {
"user_defined.a" : "aaa"
}
}
}
答案 1 :(得分:-1)
默认情况下,Elasticsearch中文档中的每个字段都已编制索引并可搜索。
Elasticsearch为搜索提供Search Lite API和Query DSL。