Comment utiliser les paramètres de requête ElasticSearch (requête DSL) pour plusieurs types?
J'ai travaillé avec le ElasticSearch parmi les derniers mois, mais encore à trouver qu'il est compliqué quand j'ai passer un complexe de requête.
Je veux exécuter la requête qui sera à la recherche de plusieurs "types" et chaque type doit être recherché avec son propre "filtres", mais vous devez les avoir combinés recherche "résultats"
Par exemple:
J'ai besoin de recherche de l'utilisateur "type de document" qui sont mes amis et en même temps, j'ai à chercher le "type d'objet" document dont j'aime bien, selon le mot clé fournie.
OU
La requête qui a à la fois le "ET" et "NON" clause
Exemple de requête:
$options['query'] = array(
'query' => array(
'filtered' => array(
'query' => array(
'query_string' => array(
'default_field' => 'name',
'query' => $this->search_term . '*',
),
),
'filter' => array(
'and' => array(
array(
'term' => array(
'access_id' => 2,
),
),
),
'not' => array(
array(
'term' => array(
'follower' => 32,
),
),
array(
'term' => array(
'fan' => 36,
),
),
),
),
),
),
);
que cette requête est destinée à la recherche de l'utilisateur avec access_id = 2, mais ne doit pas avoir le disciple de id 32 et fan de id 36
mais ce n'est pas de travail..
Edit: requête Modifiée
{
"query": {
"filtered": {
"filter": {
"and": [
{
"not": {
"filter": {
"and": [
{
"query": {
"query_string": {
"default_field": "fan",
"query": "*510*"
}
}
},
{
"query": {
"query_string": {
"default_field": "follower",
"query": "*510*"
}
}
}
]
}
}
},
{
"term": {
"access_id": 2
}
}
]
},
"query": {
"field": {
"name": "xyz*"
}
}
}
}
}
maintenant, après l'exécution de cette requête, j'obtiens deux résultats, l'un avec le suivant: "34,518" & fan: "510", et une seconde avec ventilateur:"34", mais n'est-il pas censé être seulement le deuxième dans la suite.
Des idées?
source d'informationauteur Chetan Sharma
Vous devez vous connecter pour publier un commentaire.
Vous pouvez regarder les diapositives d'une présentation que j'ai donné ce mois-ci, ce qui explique les rudiments de la façon la requête DSL fonctionne:
Termes d'affection - la ElasticSearch Requête DSL expliqué
Le problème avec votre requête, c'est que vos filtres sont imbriqués de manière incorrecte. Le
and
etnot
les filtres sont au même niveau, mais lanot
filtre doit être sousand
:Je l'ai juste essayé avec le "BOOL"
Il donne la bonne réponse.
mais je ne suis pas sûr que doit-il être utilisé comme cela ?