Recherche sur plusieurs champs avec Elastic Search
Je suis nouveau sur elastic search et je me demande comment je peux faire une recherche en spécifiant un ou plusieurs champs.
Avec SQL je voudrais écrire cette requête:
"SELECT field1, field2, field3 FROM tablename WHERE field1 = 'X' AND field2 != 'Y' AND field3 = 'Z'"
Dans Elastic Search, je suis parti de ça:
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*"
}
},
"filter": {
"term" : {
"field1" : "286"
}
}
}
}
}
OriginalL'auteur Pennywise83 | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de choisir le droit de requête pour le travail, ce qui peut être difficile au début. Vous pouvez certainement utiliser un bool requête à combiner toutes sortes de requêtes différentes ensemble, comme l'a déjà suggéré. Il y a aussi des requêtes qui permettent à être exécuté sur plusieurs champs, et la carte des requêtes booléennes à l'interne. Aussi, terme requêtes ne sont pas si commun dans un système de production car ils ne prennent pas en charge toute analyse de texte, alors que vous voulez analyser la requête d'une manière qui est similaire à la façon dont vous avez indexé sur le champ que vous interrogez.
L'un des plus commune des requêtes dans elasticsearch est le match de la requête, qui fonctionne sur un seul champ. Et il y a une autre requête avec les mêmes options qui travaille également sur plusieurs champs, appelé multi_match. Ces requêtes prennent en charge l'analyse de texte, et fonctionnent très bien. Je vous propose de les utiliser sur query_string requête par exemple, qui est beaucoup plus puissant, mais le risque d'erreur de ainsi en raison de la nécessaire analyse de processus. Je dirais que l'utilisation de la query_string seulement si vous avez spécifiquement besoin l'une de ses caractéristiques (par exemple de spécifier les noms de champ ou des opérateurs booléens dans la requête elle-même), sinon rendez-vous pour le match de requêtes.
Il est également important de comprendre la différence entre les requêtes et les filtres, avoir un regard ici pour en savoir plus.
Et de ne pas avoir un coup d'oeil à toutes les requêtes disponibles avec la requête DSL et jouer avec ceux, juste pour avoir un sentiment de toutes les différentes choses que vous pouvez faire.
Vous êtes les bienvenus, merci pour vos gentils commentaires @AndreasKavountzis!
Comment voulez-vous combiner
multi_match
avecmatch_phrase_prefix
? Je recherche une sous-chaîne dans de multiples domaines. Il n'a pas à correspondre à tous les domaines, aussi longtemps qu'il existe dans l'un d'eux.OriginalL'auteur javanna
La requête sql est équivalent à:
En tout cas je vous conseille de lire un peu la doc avant de commencer avec elasticsearch si vous êtes nouveau.
Il y a beaucoup de types de requêtes et certains d'entre eux dépend de la façon dont vous l'indice de vos données, par exemple pour les chaînes, vous pouvez analyser des chaînes de caractères (minuscules, tige mots, supprimer les mots vides, ...) lors de l'indexation. La requête que j'ai posté ne coïncidera jamais avec un doc dont champ1 est "X" si vous analysez ce domaine lors de l'indexation et de la convertir en minuscules.
Une fois que vous savez un peu mieux elasticsearch vous pouvez utiliser des filtres pour améliorer vos requêtes.
utiliser des termes de la requête à la place du terme de la requête. Regardez ce => elasticsearch.org/guide/en/elasticsearch/reference/current/...
OriginalL'auteur moliware