Как определить индекс для использования в запросе Man go - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь создать CouchDB Man go Запрос с индексом в надежде, что запрос будет выполняться быстрее. На данный момент у меня есть следующий Man go Query, который возвращает то, что я ищу, но это медленно. Поэтому, я полагаю, мне нужно создать индекс, чтобы сделать его быстрее. Мне нужна помощь, чтобы понять, как создать этот индекс.

    selector: {
      categoryIds: {
        $in: categoryIds,
      },
    },
    sort: [{ publicationDate: 'desc' }],

Можно предположить, что мои документы, скажем, новостные статьи из разных категорий. Поэтому в каждом документе у меня есть поле, которое содержит одну или несколько категорий, к которым относится новостная статья. Для этого у меня есть массив categoryIds для каждого документа. Мой запрос должен быть оптимизирован для запросов типа «Дайте мне все новости, которые имеют categoryId1 в их массиве categoryIds, отсортированных по публикацииDate». Что я не знаю, как это сделать: 1. Как определить индекс 2. Каким должен быть этот индекс 3. Как использовать этот индекс в поле «use_index» запроса Man go. Любая помощь приветствуется.

Обновление после ответа "Alexis Côté":

Если я определю индекс так:

{
  "_id": "_design/0f11ca4ef1ea06de05b31e6bd8265916c1bbe821",
  "_rev": "6-adce50034e870aa02dc7e1e075c78361",
  "language": "query",
  "views": {
    "categoryIds-json-index": {
      "map": {
        "fields": {
          "categoryIds": "asc"
        },
        "partial_filter_selector": {}
      },
      "reduce": "_count",
      "options": {
        "def": {
          "fields": [
            "categoryIds"
          ]
        }
      }
    }
  }
}

И запустим Man go Запрос вот так:

{
   "selector": {
      "categoryIds": {
         "$in": [
            "e0bd5f97ac35bdf6893351337d269230"
         ]
      }
   },
   "use_index": "categoryIds-json-index"
}

Он по-прежнему возвращает результаты, но они не сортируются в порядке, который я хочу по публикацииDate. Так что мне не ясно, что вы предлагаете для решения проблемы.

1 Ответ

0 голосов
/ 21 февраля 2020
  1. Вы можете создать индекс как задокументировано здесь
  2. В вашем случае вам понадобится индекс в поле "categoryIds".
  3. Вы можете укажите индекс, используя "use_index": "_design/<name>"

    Примечание. Планировщик запросов должен автоматически выбрать этот индекс, если он совместим.

...