Как установить отображение индекса эластичного поиска как not_analysed для всех полей - PullRequest
0 голосов
/ 18 марта 2019

Я хочу, чтобы индекс упругого поиска совпадал с точным значением для всех полей. Как мне сопоставить мой индекс "not_analysed" для всех полей.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

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

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

Обратите внимание, что для точных совпадений вам потребуется keyword тип данных + Term Query.Примеры приведены в указанных мной ссылках.

Надеюсь, это поможет!

0 голосов
/ 18 марта 2019

Для этого вы можете использовать отображение dynamic_templates.По умолчанию Elasticsearch задает поля типа text и index: true, как показано ниже:

{
  "products2": {
    "mappings": {
      "product": {
        "properties": {
          "color": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "type": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

Как видите, также создается поле ключевого слова как мультиполе.Поля этого ключевого слова индексируются, но не анализируются как текст.если вы хотите отбросить это поведение по умолчанию.Вы можете использовать указанную ниже конфигурацию для индекса при его создании:

PUT products
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "product": {
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "keyword",
              "index": false
            }
          }
        }
      ]
    }
  }
}

После этого индекс будет выглядеть примерно так:

{
  "products": {
    "mappings": {
      "product": {
        "dynamic_templates": [
          {
            "strings": {
              "match_mapping_type": "string",
              "mapping": {
                "type": "keyword",
                "index": false
              }
            }
          }
        ],
        "properties": {
          "color": {
            "type": "keyword",
              "index": false
          },
          "type": {
            "type": "keyword",
              "index": false
          }
        }
      }
    }
  }
}

Примечание: я не знаю случая, ноВы можете использовать функцию нескольких полей, как упомянуто @Kamal.В противном случае вы не сможете осуществлять поиск по не проанализированным полям.Кроме того, вы можете использовать набор отображений dynamic_templates, некоторые поля анализируются.

Пожалуйста, проверьте документацию для получения дополнительной информации:

https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html

Кроме того, мне объяснили поведение в этой статье.Извините за это, но это турецкий.Вы можете проверить примеры кода с помощью Google Translate, если хотите.

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