develop.16: Обсуждение вопросов программирования

From: Difrex(mobile) (tavern,23) 05.01.18 08:02 UTC
To: All
Subject: TopicID на dynamic: вытаскиваем тред целиком
Я тут ковыряя тредовый режим для dynamic'а понял, что проще добавить фичу в бэкенд,
чем разгребать свой говнокод на JS.

Так вот суть: в индексе каждому сообщению присваивается topicid в формате UUID(RFC 4122).
Зная topicid мы можем выбрать целиком тред с нужной нам сортировкой.

Чтобы вытащить тред по интересующему сообщению(мы знаем msgid) нам нужно будет сделать 2 запроса:
* Первый - узнаем topicid из сообщения
* Второй - вытягиваем ветку

Здесь и далее запросы в json отправляются методом POST на https://dynamic.lessmore.pw/search2.

Узнаем topicid
====
{
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    },
    {
      "_score": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "query_string": {
      "fields": [
        "msgid"
      ],
      "query": "apfIchd9i8HMMc5DKJNI"
    }
  },
  "size": 1
}
====

В ответ нам вернется документ сообщения
====
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": null,
    "hits": [
      {
        "_index": "idec5",
        "_type": "post",
        "_id": "apfIchd9i8HMMc5DKJNI",
        "_score": 9.252761,
        "_source": {
           ...
           "topicid": "fcb208f7-c947-42bc-a037-73d63b137913"
        },
        "sort": [
          1514976123000,
          9.252761
        ]
      }
    ]
  }
}
====

Теперь зная topicid можно вытянуть весь тред с сортировкой от старых к новым(или наоборот).

Модифицируем первый запрос
====
{
  "sort": [
    {
      "date": {
        "order": "asc"
      }
    },
    {
      "_score": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "query_string": {
      "fields": [
        "topicid"
      ],
      "query": "fcb208f7-c947-42bc-a037-73d63b137913"
    }
  },
  "size": 100
}
====

Ответом будет список с документами ветки отсортированный по дате от старых сообщений к новым.

Новый поиск будет доступен тут https://dynamic.lessmore.pw/search2 в ближайшее время, и нидекс будет наполняться совсем неторопливо.
После полного реиндекса поиск будет объявлен стабильным и доступен по https://dynamic.lessmore.pw/search.
Так же фетчер, маппинг, веб будут документированы и снабжаться инструкцией по развертке.

// Народ, а каких бы еще фич хотелось бы вам?
[253 / 338]