DICOM имеет ряд стандартов, касающихся порядка именования изображений go.
То, что вы имеете в качестве массива, само по себе является ключом-значением. По сути, у вас есть нечто, называемое tag
, tag name
и value
для этого конкретного изображения.
Короче говоря, вы можете сказать, что у вас есть кортежи. Например,
tag - "(0008,0020)"
tag_name - "StudyDate"
tag_value - 2004-01-01
Я придумал приведенный ниже дизайн для изображений DICOM, и мне нравится думать, что он будет работать для большинства сценариев использования. Ниже приведено сопоставление, примеры документов, запрос и ответ в том виде, в котором он выглядит:
Сопоставление:
PUT dicom
{
"mappings": {
"properties": {
"dicom_tags_text":{
"type": "nested",
"properties": {
"tag": {
"type": "keyword"
},
"tag_name": {
"type": "keyword"
},
"tag_value":{
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
},
"dicom_tags_date":{
"type": "nested",
"properties": {
"tag": {
"type": "keyword"
},
"tag_name": {
"type": "keyword"
},
"tag_value":{
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
}
}
Ниже приведены некоторые концепции, которые я использовал
Каждое изображение будет иметь две категории данных: с полем text
и с полем date
. Вы можете добавить больше полей в зависимости от того, хотите ли вы сохранить какой-либо другой формат данных.
Обратите внимание, что для простоты я использовал ключевое слово для строковых данных. Это потому, что они используются для точного соответствия. Вы также можете использовать text
данные, но, пожалуйста, потратьте некоторое время, чтобы понять разницу между ними.
Образцы документов:
POST dicom/_doc/1
{
"dicom_tags_text": [
{
"tag": "(0008,0005)",
"tag_name": "SpecificCharacterSet",
"tag_value": "ISO_IR 100"
},
{
"tag": "(0004,1511)",
"tag_name": "SOPInstanceId",
"tag_value": "1001"
}
],
"dicom_tags_date": [
{
"tag": "(0008,0020)",
"tag_name": "StudyDate",
"tag_value": "2002-04-01"
},
{
"tag": "(0008,0023)",
"tag_name": "ContentDate",
"tag_value": "2002-04-01"
}
]
}
POST dicom/_doc/2
{
"dicom_tags_text": [
{
"tag": "(0008,0005)",
"tag_name": "SpecificCharacterSet",
"tag_value": "ISO_IR 100"
},
{
"tag": "(0004,1511)",
"tag_name": "SOPInstanceId",
"tag_value": "1004"
}
],
"dicom_tags_date": [
{
"tag": "(0008,0020)",
"tag_name": "StudyDate",
"tag_value": "2020-01-01"
}
]
}
Обратите внимание, что я создал два документа выше, и обратите внимание, как я их создал. Вы можете проверить это с помощью сопоставления, чтобы понять сопоставление в первую очередь.
Запрос запроса:
Теперь предположим, что ваш вариант использования состоит в том, чтобы получить все документы с кодировкой ISO_IR 100
с выполнением StudyDate
после 2019-01-01
.
Ниже приведен запрос:
POST dicom/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "dicom_tags_text",
"query": {
"bool": {
"must": [
{
"term": {
"dicom_tags_text.tag_name": "SpecificCharacterSet"
}
},
{
"match": {
"dicom_tags_text.tag_value": "iso ir 100"
}
}
]
}
}
}
},
{
"nested": {
"path": "dicom_tags_date",
"query": {
"bool": {
"must": [
{
"term": {
"dicom_tags_date.tag_name": "StudyDate"
}
},
{
"range": {
"dicom_tags_date.tag_value": {
"gte": "2019-01-01"
}
}
}
]
}
}
}
}
]
}
}
}
Обратите внимание, что для типа данных nested
нам необходимо использовать nested queries
. Я использовал Term Query для ключевых слов типов и использовал простое Match Query для text . Пожалуйста, прочитайте вышеупомянутые ссылки, чтобы понять больше об этом.
Ниже приведен ответ:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 2.4854383,
"hits" : [
{
"_index" : "dicom",
"_type" : "_doc",
"_id" : "2",
"_score" : 2.4854383,
"_source" : {
"dicom_tags_text" : [
{
"tag" : "(0008,0005)",
"tag_name" : "SpecificCharacterSet",
"tag_value" : "ISO_IR 100"
},
{
"tag" : "(0004,1511)",
"tag_name" : "SOPInstanceId",
"tag_value" : "1004"
}
],
"dicom_tags_date" : [
{
"tag" : "(0008,0020)",
"tag_name" : "StudyDate",
"tag_value" : "2020-01-01"
}
]
}
}
]
}
}
Дайте мне знать, если это то, что вам поможет !!