ElasticSearch не работает для поиска во вложенных объектах - PullRequest
0 голосов
/ 25 февраля 2019

У меня проблема с поиском в индексированных вложенных сопоставлениях в ElasticSearch 5.6 (High Rest Client - Java API).Когда я запрашиваю вложенные объекты, он не возвращает результатов.Когда я запрашиваю поля, которые являются стандартными (wikiField - text, и template.id - long), он возвращает этот процесс правильно.

Ниже я прилагаю свое отображение, индексированный объект и метод, используемый для поиска метаданных.Я запустил тест для параметра: карта с размером 1 ключ TSL_ATS и значение Proc

Отображение:

{
  "mappings": {
    "process": {
      "dynamic": "strict",
      "properties": {
        "meta": {
          "dynamic": "false",
          "type": "object",
          "properties": {
            "ID": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "mdWrap": {
              "type": "nested",
              "properties": {
                "test.metadata": {
                  "type": "nested",
                  "properties": {
                    "name": {
                      "type": "text",
                      "fields": {
                        "keyword": {
                          "type": "keyword",
                          "ignore_above": 256
                        }
                      }
                    },
                    "content": {
                      "type": "text",
                      "fields": {
                        "keyword": {
                          "type": "keyword",
                          "ignore_above": 256
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "template": {
          "properties": {
            "id": {
              "type": "long"
            }
          }
        },
        "wikiField": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

Индексированный объект, возвращаемый из индекса:

{
  "_index": "testindex",
  "_type": "process",
  "_id": "2",
  "_version": 7,
  "found": true,
  "_source": {
    "wikiField": "problem",
    "template.id": 1,
    "meta": [
      {
        "mdWrap": {
          "MDTYPE": "MODS",
          "xmlData": {
            "test": {
              "test": "http://meta.test.org/v1/",
              "metadata": [
                {
                  "name": "TitleDocMain",
                  "content": "Second process"
                },
                {
                  "name": "TitleDocMainShort",
                  "content": "Second"
                },
                {
                  "name": "TSL_ATS",
                  "content": "Proc"
                }
              ]
            }
          }
        },
        "ID": "DMDLOG_0000"
      },
      {
        "mdWrap": {
          "MDTYPE": "MODS",
          "xmlData": {
            "test": {
              "test": "http://meta.test.org/v1/",
              "metadata": {
                "name": "pathimagefiles",
                "content": "file:/2/images/Sec_Proc_tif"
              }
            }
          }
        },
        "ID": "DMDPHYS_0000"
      }
    ]
  }
}

Метод запроса процесса с определенными метаданными:

public List<ProcessDTO> findByMetadata(Map<String, String> metadata) throws Exception {
    String key = "meta.mdWrap.xmlData.test.metadata.";

    BoolQueryBuilder query = new BoolQueryBuilder();
    for (Map.Entry<String, String> entry : metadata.entrySet()) {
        query.must(matchQuery(key + "name", entry.getKey()));
        query.must(matchQuery(key + "content", entry.getValue()));
    }

    return findByQuery(query, true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...