1
votes

Plusieurs mappages pour un index dans Elasticsearch 6

J'ai un index qui contient des documents de différents types (sans parler de _type ici) et chaque document a un champ document_type qui indique leur type. Est-il possible de définir des mappages pour chaque type de document dans cet index?


0 commentaires

3 Réponses :


0
votes

Non, si vous souhaitez utiliser un seul index, vous devez définir un seul mappage qui combine les champs de chaque type de document.

Une meilleure façon pourrait être de définir des index séparés sur le même cluster pour chaque type de document. Vous pouvez ensuite créer un seul alias d'index qui est alias sur ces deux index si vous souhaitez pouvoir interroger sur tous les types de documents. Assurez-vous que tous les champs qui existent dans les deux documents ont le même type de données dans les deux mappages.


0 commentaires

0
votes

Il n'est pas possible d'avoir un seul nom de champ avec plus d'un type de mappage dans le même index. Deux options auxquelles je peux penser: 1. Séparez les différents types de documents pour séparer les index. 2. Utilisez des noms de champs différents pour différents types de documents, afin que chaque nom puisse avoir un mappage différent. Vous pouvez également utiliser l'imbrication, comme: type_a.my_field et type_b.my_field, tous deux dans le même index.


0 commentaires

1
votes

Est-il possible de définir des mappages pour chaque type de document dans cet index?

Non, si vous pensez utiliser le nom de champ même avec différents types. Par exemple, le nom de champ id de type chaîne et entier ne fonctionnera pas.

Avoir un type_document différent indique essentiellement différents domaines. Ce que vous pouvez faire est de regrouper les informations sous chaque domaine ou type respectif. Par exemple, un employé et un projet ont tous deux un identifiant et un nom, mais des types différents dans cet exemple. Certains appellent cela l'imbrication.

Un exemple de mappage d'index:

PUT example/doc/1
{
  "employee": {
    "id": 4711,
    "name": "John Doe"
  },
  "project": {
    "id": "Project X",
    "name": "Firebrand"
  }
}

Si vous écrivez les informations, avec différents types.

PUT example
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }, 
  "mappings": {
    "doc": {
      "properties": {
        "employee": {
          "properties": {
            "id": {
              "type": "integer"
            },
            "name": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 64
                }
              }
            }
          }
        },
        "project": {
          "properties": {
            "id": {
              "type": "keyword"
            },
            "name": {
              "type": "keyword",
              "ignore_above": 32
            }
          }
        }
      }
    }
  }
}

D'autres soutiendraient de stocker l'employé et le projet dans des index séparés. Cette approche dépend de votre scénario et est également souhaitable. Vous permettez aux deux domaines d'évoluer séparément l'un de l'autre.

Avoir un index distinct des employés et des projets vous donne un avantage en matière de maintenance. Pour interroger certains diront que vous pouvez grouper qu'avec un alias. Dans l'exemple ci-dessus, cela n'a pas de sens car les types de champs sont différents. Une recherche du nom sur un champ de texte analysé est différente de celle sur un mot-clé . L'interrogation a du sens si vous avez le type de champ même .


0 commentaires