找出ElasticLinq实际在做什么

基本的

我有一个ElasticDatastore我需要能够根据业务逻辑中的任意条件返回文档列表的工具。

该方法目前看起来像这样...

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;
}

我这样称呼它

var newItems = dataStore.Items(x=>
        x.SomeField == node.SomeValue.ToString()
        & (x.AssignedTo == null
         | x.AssigmentExpires < DateTime.UtcNow)
    ).ToList();

就目前情况而言,该方法返回零结果。通过使用弹性头(和卷曲),我可以验证是否存在符合索引中指定条件的文档。

我的第一个猜测是EsLinq预期的字段名称不正确(框...索引是使用nest构建的)。但是,我找不到一种很好的方法来检查EsLinq实际发送给Elasticsearch的内容。

我可以

esLinq.Query<Item>().ToElasticSearchQuery();

并获得一个表示(空白)查询的json字符串,但是...Query<Item>().Where(predicate)返回IEnumerable<Item>没有ToElasticSearchQuery扩展名的。

编译器接受

ret.AsQueryable().ToElasticSearchQuery()

但我ArgumentException在运行时得到了

Query must be of type IElasticQuery<> to call ToElasticSearchQuery()

如何检查EsLinq发送给Elasticsearch的查询,以便诊断出我遇到的问题?

达米安

如果安装Fiddler,则可以看到正在发送和返回的确切HTTP。另外,您可以使用:

  1. .ToQueryInfo()方法并检查.Body和.Uri属性
  2. ElasticContext上的ILog接口可捕获原始查询和响应

我可以想象问题是您的CLR对象与文档字段名称之间的映射-默认情况下,ElasticMapping类使用驼峰式命名字段名称并尝试使类型名称复数。您可以使用构造函数开关将其关闭,也可以根据自己的特定约定将其子类化。

另外,我认为您的查询应该说||。对于OR和&&对于AND-支持这些布尔运算符,但| 和&按位运算不是。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

找出给定的gcc选项/标记正在做什么?

来自分类Dev

PrimeFaces Datatable-f:facet实际在做什么?

来自分类Dev

Spark DataFrame方法“ toPandas”实际上在做什么?

来自分类Dev

以下定义实际上在做什么?

来自分类Dev

Nodetool垃圾回收实际上在做什么

来自分类Dev

这段代码实际上在做什么?

来自分类Dev

我的 serverSessionSecrect() 函数实际上在做什么?

来自分类Dev

“ RailsFCGIHandler”在做什么?

来自分类Dev

eval在做什么?

来自分类Dev

程序在做什么

来自分类Dev

火狐在做什么?

来自分类Dev

如何找出ibus-daemon和ibus-ui-gtk3在做什么?

来自分类Dev

解释“ DEBUG = myapp:* npm start”实际上在做什么

来自分类Dev

手写装饰器(例如@login_required)实际上在做什么?

来自分类Dev

Xamarin在使用iOS构建主机时实际上在做什么?

来自分类Dev

此代码如何在gcc中编译,它实际上在做什么?

来自分类Dev

HTML5 File.slice方法实际上在做什么?

来自分类Dev

Visual Studio Performance Profiler“强制GC”按钮实际上在做什么?

来自分类Dev

这些VMWare指令实际上在做什么?(禁用设备防护并删除EFI变量)

来自分类Dev

0 [p]在做什么?

来自分类Dev

Javascript:“-0”在做什么?

来自分类Dev

Android Snippet在做什么?

来自分类Dev

env <command>在做什么?

来自分类Dev

ScalaRX代码在做什么?

来自分类Dev

“自我”在做什么

来自分类Dev

这个脚本在做什么?

来自分类Dev

“ sed s _。* / _”在做什么?

来自分类Dev

设置操作在做什么?

来自分类Dev

glutTimerFunc()实际做什么?