проблема в упругом поисковом агрегировании - PullRequest
0 голосов
/ 11 сентября 2018

В эластичном поисковом агрегационном запросе мне нужно получить все фильмы, которые просмотрел пользователь, который смотрит фильм «Замороженные». Вот как мой источник результатов

{
  "_index": "user",
  "_type": "user",
  "_id": "ovUowmUBREWOv-CU-4RT",
  "_version": 4,
  "_score": 1,
  "_source": {
    "movies": [
      "Angry birds 1",
      "PINNOCCHIO",
      "Frozen",
      "Hotel Transylvania 3"
    ],
    "user_id": 86
  }
}

Это запрос, который я использую.

{
  "query": {
    "match": {
      "movies": "Frozen"
    }
  },
  "size": 0,
  "aggregations": {
    "movies_like_Frozen": {
      "terms": {
        "field": "movies",
        "min_doc_count": 1
      }
    }
  }
}

Результат, который я получил в корзине, правильный, но названия фильмов разделены пробелами, как это

"buckets": [
                {
                    "key": "3",
                    "doc_count": 2
                },
                {
                    "key": "hotel",
                    "doc_count": 2
                },
                {
                    "key": "transylvania",
                    "doc_count": 2
                },
                {
                    "key": "1",
                    "doc_count": 1
                },
                {
                    "key": "angry",
                    "doc_count": 1
                },
                {
                    "key": "birds",
                    "doc_count": 1
                }
            ]

Как я могу получить ведра с "Angry birds 1", "Hotel Transylvania 3" в результате.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 сентября 2018

Вasticsearch 6.x каждое текстовое поле анализируется неявно.Чтобы переопределить это, вам нужно создать отображение для полей текстового типа как not_analyzed в индексе, а затем вставить в него документы.

В вашем случае,

{
  "mappings": {
    "user": {
      "properties": {
        "movies": {
          "type": "text",
          "index": "not_analyzed",
          "fields": {
            "keyword": {
              "type": "text",
              "index": "not_analyzed"
            }
          }
        },
        "user_id": {
          "type": "long"
        }
      }
    }
  }
}

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...