我在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"
}
}]
...
}