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