web-dev-qa-db-fra.com

Elasticsearch.net - Requête de gamme

J'essaie d'interroger un index Elasticsearch à partir de C # via Elasticsearch.net (pas NEST). Plus précisément, je dois obtenir tous les documents avec le statut de "succès" qui ont été créés depuis une date donnée. Pour tenter de le faire, j'ai:

var query = new {
  query = new {
    match = new {
      field="status",
      query="success"
    }
  },

  range = new {
    ?
  }
};

Je ne sais pas quoi utiliser pour la partie range. En fait, je ne suis même pas sûr si ma syntaxe pour query est correcte. Je ne comprends pas vraiment comment la syntaxe C # est mappée sur le DSL de requête dans Elasticsearch. Toute aide est appréciée.

Je vous remercie!

12
Zach Templeton

Quelque chose comme ça devrait faire:

var query = new {
  bool = new {
    must = new {
      match = new {
        field = "status",
        query = "success"
      }
    },
    filter = new {
      range = new {
        createDate = new {
          gt = "2018-12-01T00:00:00.000Z"
        }
      }
    }
  }
};
3
Val

Je ne comprends pas vraiment comment la syntaxe C # est mappée sur le DSL de requête dans Elasticsearch.

En regardant l'exemple fourni, je suppose que vous voulez utiliser PosData.Serializable(query). Dans ce cas, l'objet de requête (quel que soit son type) sera sérialisé JSON et publié sur le cluster elasticsearch sans aucune modification. Lorsque vous créez un objet à l'aide de la syntaxe new {} C #, il est sérialisé en JSON par défaut avec les mêmes clés que les propriétés de cet objet. C'est l'objet

new {
    query = new {
        bool = new {
            must = new {
                term = new {
                    status = "success"
                }
            },
            filter = new {
                range = new {
                    date = new { gte = "2018-12-22T00:00:00.000Z" }
                }
            }
        }
    }
}

sera sérialisé et transmis à elasticsearch en tant que

"query": {
    "bool": {
        "must": {
            "term": {
                  "status": "success"
            }
        },
        "filter": {
            "range": {
               "date": { "gte": "2018-12-22T00:00:00.000Z" }
            }
        }
    }
}

Ainsi, en utilisant le client Elasticsearch de bas niveau, vous créez des objets dont le mappage est presque 1: 1 avec la syntaxe Query DSL. Vous pouvez copier des exemples de élastique.co, remplacer ":" par "= nouveau", supprimer les guillemets des noms de propriété et, en gros, le résoudre.

1
Maxim Kosov

La requête serait comme:

var query = new {
  bool = new {
    must = new {
      match = new {
        field = "status",
        query = "success"
      }
    },
    filter = new {
      range = new {
        createDate = new {
          gte = "2018-01-01T00:00:00.000Z",
          lt = "2019-01-01T00:00:00.000Z"
        }
      }
    }
  }
};
0
Habeeb