У меня небольшая проблема с ElasticSearch, и я не могу найти никакой документации по этой проблеме. Я думаю, что знаю, в чем проблема, я просто хотел попросить убедиться, что я прав в диагностике проблемы, а также спросить, есть ли обходной путь, который кто-нибудь знает.
Я работаю с ElasticSearchJava SDK (v. 7.xx). У меня есть 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"
}
}]
...
}