ElasticSearch - оставить большое текстовое поле из всех процессов, но все же вернуть его в результатах? - PullRequest
0 голосов
/ 11 июля 2019

У нас есть индекс ElasticSearch (ES версия 6.4.2), который содержит более 100 миллионов документов, состоящих примерно из 5 полей в каждом. Одним из этих полей является полный текст новостной статьи.

Проблема в том, что сейчас наш поиск по этому индексу занимает более 5-6 секунд, чтобы вернуть результаты, тогда как все остальные наши индексы (которые являются типичными структурированными записями) занимают менее секунды. Дело в том, что нам вообще не нужно искать внутри поля, содержащего текст новости, во время запроса, но мы хотим вернуть это поле в результатах.

Здесь я предполагаю, что весь этот новостной текст находится в кеше ES и предназначен для такого длительного времени поиска, когда они даже не нужны, поскольку мы не ищем их. Есть ли способ, из-за отсутствия лучшего способа сформулировать это, исключить поле текста новостей из всех процессов / кэширования ES, но все же фактически вернуть это поле в результатах? Я пытаюсь проверить способы увеличения скорости поиска по этому индексу.

1 Ответ

2 голосов
/ 12 июля 2019

Может быть два подхода к этому:

1. Установите "index": false для поля, которое не должно быть доступно для поиска.Прочитайте this .

{
  "fNews": {
    "type": "text",
    "index": false
  }
}

2. Если вы используете запрос query_string для поиска, задайте поля, по которым должен выполняться поиск.Предположим, у вас есть 3 поля f1, f2 и fNews, и вы не хотите искать по fNews, тогда запрос будет выглядеть примерно так:

{
  "query": {
    "query_string": {
      "fields": [
        "f1",
        "f2"
      ],
      "query": "some search string"
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...