J'ai un ElasticDatastore
dont j'ai besoin pour pouvoir retourner une liste de documents selon des critères arbitraires dans la logique métier.Découvrez ce que fait réellement ElasticLinq
La méthode ressemble actuellement quelque chose comme ça ...
private ElasticContext esLinq;
private void initialise() {
esLinq = new ElasticContext(new ElasticConnection(endpoint, index: index));
}
public IEnumerable<Entities.Item> Items(Func<Entities.Item, bool> predicate) {
var ret = esLinq.Query<Item>().Where(predicate);
return ret;
}
Je vous appelle comme ça
var newItems = dataStore.Items(x=>
x.SomeField == node.SomeValue.ToString()
& (x.AssignedTo == null
| x.AssigmentExpires < DateTime.UtcNow)
).ToList();
état actuel des choses, la méthode renvoie aucun résultat. En utilisant une tête élastique (et curl), je peux vérifier qu'il y a des documents qui correspondent aux critères spécifiés dans l'index. Ma première supposition est que les noms de champs prévus par EsLinq sont incorrects (casing ... l'index a été construit en utilisant nest). Cependant, je ne peux pas trouver un bon moyen d'examiner ce que EsLinq envoie réellement à elasticsearch.
je peux faire
esLinq.Query<Item>().ToElasticSearchQuery();
Et obtenir une chaîne JSON qui représente le (vide) requête, cependant, ...Query<Item>().Where(predicate)
retourne un IEnumerable<Item>
qui ne dispose pas d'extension ToElasticSearchQuery
.
Le compilateur accepte
ret.AsQueryable().ToElasticSearchQuery()
mais je reçois un ArgumentException
lors de l'exécution:
Query must be of type IElasticQuery<> to call ToElasticSearchQuery()
Comment puis-je examiner la requête envoyé par EsLinq à ElasticSearch je peux diagnostiquer le problème que je suis frappe?