Я использую Elasticsearch v1.5.2. У меня есть документ JSON, который выглядит следующим образом.Почему я не могу правильно запросить поле HashMap в Elasticsearch?
{
"id": "RRRZe32",
"metadata": {
"published": "2010-07-29T18:11:43.000Z",
"codeId": "AChdUxnsuRyoCo7roK6gqZSg",
"codeTitle": "something"
}
}
Мой объект Java POJO, который поддерживает этот JSON, выглядит следующим образом. Обратите внимание, что я использую Spring-Boot v1.3.0.M2 с зависимостью spring-boot-starter-data-elasticsearch
.
@Document(indexName="ws", type="vid")
public class Video {
@Id
private String id;
@Field(type=FieldType.Object, index=FieldIndex.not_analyzed)
private Map<String, Object> metadata;
}
Мое отображение определяется следующим образом.
{
"ws": {
"mappings": {
"vid": {
"properties": {
"id": {
"type": "string"
},
"metadata": {
"properties": {
"codeId": {
"type": "string"
},
"codeTitle": {
"type": "string"
}
}
}
}
}
}
}
}
Я могу запросить документ (используя Sense
) успешно по metadata.codeTitle
, но не metadata.codeId
. Мой запрос для metadata.codeTitle
выглядит следующим образом.
{
"query": {
"bool": {
"must": [
{
"term": {
"metadata.codeTitle": {
"value": "something"
}
}
}
]
}
}
}
Мой запрос для metadata.codeId
выглядит следующим образом.
{
"query": {
"bool": {
"must": [
{
"term": {
"metadata.codeId": {
"value": "AChdUxnsuRyoCo7roK6gqZSg"
}
}
}
]
}
}
}
Любые идеи о том, что я делаю неправильно?
Да, это ответ. Но если вы заметили, используя аннотации Spring, я думал, что я задал 'not_analyzed' с' FieldIndex.not_analyzed'. Я приму свой ответ немного (SO хочет, чтобы я подождал 8 минут). –
Указанный 'not_analyzed' для поля' metadata' и не каскадируется во внутренние поля 'metadata'. Вы можете увидеть это при извлечении сгенерированного сопоставления для вашего типа 'vid' с помощью' curl -XGET localhost: 9200/ws/_mapping/vid' – Val