Для индексации атрибутов товара, более короткие текстовые поля против меньшего количества полей с большим количеством слов - PullRequest
1 голос
/ 24 февраля 2020

Я планирую использовать эластичный поиск для индексации атрибутов продукта. Каждый документ должен иметь около 60 фиксированных полей. Я читал документацию о настройке скорости поиска . В нем упоминается, что когда запрос query_string или multi_match предназначен для нескольких полей, производительность снижается. Применяется ли этот оператор для match или match_phrase запросов?

Пример

Запрос 1:

{
  "mappings": {
    "properties": {
      "case_color": {
        "type": "text", // keyword type is not flexible enough in my case
      },
      "case_finish": {
        "type": "text",
      }
    }
  }
}

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "case_color": {
              "query": "blue"
            }
          }
        },
        {
          "match": {
            "case_finish": {
              "query": "polished"
            }
          }
        }
      ]
    }
  }
}

Запрос 2:

{
  "mappings": {
    "properties": {
      "case": {
        "type": "text",
      },
    }
  }
}
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "case": {
              "query": "blue color"
            }
          }
        },
        {
          "match": {
            "case": {
              "query": "polished finish"
            }
          }
        }
      ]
    }
  }
}

Лучше ли поместить цвета корпуса и атрибуты fini sh в одно большое поле "case", чем разбивать их на разные поля?

Однако, поместив все атрибуты, связанные с регистром, в поле "case", оно будет содержать больше слов:

case: blue color, brushed and matte finish, plastic material

Разделив их на разные поля, в каждом поле будет меньше слов:

case_color: blue
case_finish: brushed and matte
material: plastic

Я хотел бы знать, какой подход лучше.

1 Ответ

3 голосов
/ 18 апреля 2020

Я бы go даже дальше, чем обсуждалось выше: отбросьте свободный текст и используйте только ключевые слова (не в смысле отображения - вы можете продолжать использовать text). Я имею в виду:

case_color: "blue"
case_finish: ["brushed", "matte"]    <---
material: "plastic"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...