quelle est la différence entre _source et _all dans Elasticsearch
La différence entre les deux, qui détiennent tous les champs, m'échappe.
Si mon document a:
{"mydoc":
{"properties":
{"name":{"type":"string","store":"true"}},
{"number":{"type":"long","store":"false"}},
{"title":{"type":"string","include_in_all":"false","store":"true"}}
}
}
Je comprends que _source est un domaine qui a tous les champs. Mais le fait de _all?
Est-ce à dire que "nom" sont enregistrés plusieurs fois (deux fois? dans _src et dans _all), l'augmentation de l'espace disque que le document prend?
Est "nom" stockés qu'une seule fois pour le champ, une fois pour _source, et une fois pour _all?
que dire de "nombre", est-il stocké dans tout, même si pas dans _source?
Quand dois-je utiliser _source dans ma requête, et quand _all?
Ce qui est le cas d'utilisation où je peux désactiver _all, et de la fonctionnalité serait alors refusé de moi?
Vous devez vous connecter pour publier un commentaire.
C'est à peu près la même que la différence entre les champs indexés et stockés dans les champs lucene.
Vous utilisez des champs indexés lorsque vous souhaitez rechercher sur eux, tandis que vous stockez les champs que vous souhaitez retourner dans les résultats de recherche.
La
_source
champ est destiné à stocker l'ensemble du document source qui a été envoyé à elasticsearch. C'est de l'utiliser comme résultat de la recherche, pour être récupérées. Vous ne pouvez pas rechercher sur elle. En fait, c'est un champ stocké dans lucene et pas indexés.La
_all
champ est destiné à indexer tout le contenu qui arrivent de tous les champs que vos documents sont composés de. Vous pouvez effectuer une recherche sur elle, mais ne jamais revenir, puisque c'est indexée mais pas stockées dans lucene.Il n'y a pas de redondance, les deux champs sont destinés à un autre cas d'utilisation et stockées dans différents endroits, à l'intérieur de l'index lucene. Le
_all
champ devient une partie de ce que nous appelons l'index inversé, utiliser pour l'indexation de texte et être en mesure d'exécuter la recherche de texte intégral contre elle, tandis que les_source
champ est simplement stockés dans le cadre de la lucene documents.Vous de ne jamais utiliser le
_source
champ dans vos requêtes, uniquement lorsque vous obtenir les résultats puisque c'est ce que elasticsearch renvoie par défaut. Il y a quelques caractéristiques qui dépendent de la_source
champ, que vous perdez si vous le désactiver. L'un d'eux est le mise à jour de l'API. Aussi, si vous le désactivez, vous devrez penser à configurer commestore:yes
dans votre cartographie de tous les champs que vous souhaitez retourner dans les résultats de recherche. Je dirais plutôt de ne pas le désactiver, sauf si cela vous dérange, car il est vraiment utile dans beaucoup de cas. Un autre cas d'utilisation commune serait quand vous avez besoin d'indexer vos données; vous pouvez simplement récupérer tous vos documents à partir de elasticsearch lui-même et juste renvoyer à un autre index.D'autre part, la
_all
champ est juste un défaut de capture sur le terrain, que vous pouvez utiliser quand vous voulez juste de faire une recherche sur tous les champs disponibles et que vous ne souhaitez pas spécifier toutes dans vos requêtes. C'est pratique, mais je ne voudrais pas compter sur elle trop sur la production, où il est préférable d'exécuter des requêtes plus complexes sur différents domaines, avec différents poids chaque. Vous souhaiterez peut-être désactiver si vous ne l'utilisez pas, cela aura un impact plus faible que la désactivation de la_source
à mon avis._all
champ par défaut est défini comme"index":yes
et ne sont pas liées à la cartographie, les autres champs si pas lors de l'utilisation de lainclude_in_all
option. Si vous n'utilisez pas_all
domaine que j'avais désactiver complètement au lieu de définir tous les champs pour"include_in_all":false
._all
champ de sauver beaucoup d'espace disque? (il semble qu'il est presque le double de l'espace nécessaire, de manière intuitive)_all
a son propre analyseur, bien sûr, c'est indexée par défaut, mais il n'a pas utiliser la troncature. Il utilise le même analyseur standard pour toutes les pièces qui sont indexés en elle._all
champ de n'importe quelle façon? Je n'ai pas de cas d'utilisation à ce sujet, mais je suis curieux quand même 🙂