Elasticsearch:搜索动态对象

时间:2019-10-09 16:50:03

标签: elasticsearch indexing

我在ElasticSearch上遇到了一个小问题,而且似乎找不到有关此问题的任何文档。我想我知道问题出在哪里,我只是想问一下以确保我对问题的诊断正确,还问是否有任何人都知道的解决方法。

我正在使用ElasticSearch Java SDK(v.x 7.x)。我有一个POJO代表我的ElasticSearch对象,还有一个ElasticSearch映射代表我的对象:

public class myClass {
    private Map<String, String> dynamicData;
    private String staticData;
}
  "settings": {
    ...
  },
  "mappings": {
    "properties": {
      "dynamicData": {
        "properties": {},
        "dynamic": "true"
      },
      "staticData": {
        "type": "keyword"
      }
    }
  }
}

将数据写入此架构非常有效,并且我能够使用ES浏览器来验证此设置是否有效并正确写入ES。我遇到的问题是我无法查询dynamicData的子字段。例如,如果我针对该数据编写任何Term或Match查询(这是一个String String映射,因此它都是文本数据),则结果为零。我可以针对staticData进行查询而不会出现问题。

我的问题是:ES是否以我希望的方式动态索引动态数据(以便可搜索)?如果没有,是否有解决方法?一种有效的解决方案是基于整个dynamicData对象查询相等性,如果可能的话,这不会对我造成问题。

谢谢!

编辑:根据注释中的请求的示例数据(JSON格式)

{
    "staticData": "Title",
    "dynamicData": {
        "field1": "somedata"
    }
}

并查询:

{
    "query": {
        "bool": {
            "must": [{
                "term": {
                    "staticData": {
                        "value": "Title"
                    }
                }
            },{
                "term": {
                    "dynamicData.field1": {
                        "value": "somedata"
                    }
            }]
...
}

0 个答案:

没有答案