Elasticsearch:如何搜索user_defined字段?

时间:2016-03-21 03:05:52

标签: mysql elasticsearch

我使用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搜索此类数据?

任何人都有好主意?

2 个答案:

答案 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 APIQuery DSL