# Ingest Attachments plugin & Highlighting

**URL:** <https://discuss.elastic.co/t/ingest-attachments-plugin-highlighting/106317>\
**Category:** Вопросы на русском языке\
**Created:** [November 3, 2017, 1:36pm UTC](https://discuss.elastic.co/t/ingest-attachments-plugin-highlighting/106317 "2017-11-03T13:36:44Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alexey\_Kalina](https://avatars.discourse-cdn.com/v4/letter/a/7ba0ec/32.png) [@Alexey\_Kalina](https://discuss.elastic.co/u/Alexey_Kalina)\
**Post date:** [November 3, 2017, 1:36pm UTC](https://discuss.elastic.co/t/ingest-attachments-plugin-highlighting/106317/1 "2017-11-03T13:36:44Z")

</div>

Добрый день!

Существует следующая задача:  
Имеется такой документ:

```auto
{
    "Files": [
        {
            "Name": "first.pdf",
            "Content": "base64 строка",
            "Id": "906fe807-8a78-4918-91ee-96307c21dd7c"
        },
        {
            "Name": "second.txt",
            "Content": "другая base64 строка",
            "Id": "b71f1d18-e185-4d9a-bd0e-9ae94ec4bd6f"
        }
    ]
}

```

Необходимо:

1. Проиндексировать его с помощью ingest-attachment плагина.
2. Написать поисковый запрос, в ответе на который получим хайлайты по содержимому файлов, по которым можно понять какому файлу они соответствуют.

В версии Elasticsearch 2.\* использовался плагин mapper-attachments, и эта проблема решалась индексированием файлов с различными именами полей.  
То есть документ индексировался в таком формате:

```auto
{
    "Files": [
        {
            "File1": {
                "Name": "first.pdf",
                "Content": "base64 строка",
                "Id": "906fe807-8a78-4918-91ee-96307c21dd7c"
            }
        },
        {
            "File2": {
                "Name": "second.txt",
                "Content": "другая base64 строка",
                "Id": "b71f1d18-e185-4d9a-bd0e-9ae94ec4bd6f"
            }
        }
    ]
}

```

При использовании нового плагина непонятно как необходимо описать processor, чтобы было возможно индексировать массив объектов с различными именами.

Или, может быть, есть возможность написать такой поисковый запрос, с помощью которого можно решить эту задачу.

Буду очень благодарен за помощь!

---

<div class="post-metadata">

**Author:** ![jetnet](https://avatars.discourse-cdn.com/v4/letter/j/a87d85/32.png) [@jetnet](https://discuss.elastic.co/u/jetnet)\
**Post date:** [November 4, 2017, 7:15pm UTC](https://discuss.elastic.co/t/ingest-attachments-plugin-highlighting/106317/2 "2017-11-04T19:15:06Z")

</div>

Думаю, поисковым запросом это не решить...  
Если взять [готовый пример](https://www.elastic.co/guide/en/elasticsearch/plugins/master/ingest-attachment-with-arrays.html) и добавить туда вот такой второй процессор, который тупо перемещает 2 поля:

```auto
    {
      "script": {
        "lang": "painless",
        "inline": """
            for (def i = 0; i < ctx.attachments.length; i++) {  
              def f = "File" + (i+1);
              ctx.attachments[i][f] = ctx.attachments[i].attachment;
              ctx.attachments[i][f].filename = ctx.attachments[i].filename;
              for (def rf : ['attachment', 'filename', 'data']) {
                ctx.attachments[i].remove(rf);
              }
            }
        """,
        "params": {}
      }
    }

```

то будет видно, где есть хайлайты:

```auto
GET my_index/my_type/_search
{
  "query": {
    "query_string": {
      "query": "test"
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    },
    "require_field_match": false
  }
}

```

Результат:

```auto
...
        "highlight": {
          "attachments.File2.content": [
            "This is a <em>test</em>"
          ]
        }
...

```

---

<div class="post-metadata">

**Author:** ![Alexey\_Kalina](https://avatars.discourse-cdn.com/v4/letter/a/7ba0ec/32.png) [@Alexey\_Kalina](https://discuss.elastic.co/u/Alexey_Kalina)\
**Post date:** [November 6, 2017, 9:01am UTC](https://discuss.elastic.co/t/ingest-attachments-plugin-highlighting/106317/3 "2017-11-06T09:01:59Z")

</div>

Отличное решение! Большое спасибо за помощь!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 4, 2017, 9:02am UTC](https://discuss.elastic.co/t/ingest-attachments-plugin-highlighting/106317/4 "2017-12-04T09:02:05Z")

</div>

Closed on December 4, 2017, 9:02am UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
