elasticsearch.net-范围查询

tcomlyy6  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(3)|浏览(251)

我正在尝试通过elasticsearch.net(而不是nest)从c#查询elasticsearch索引。具体来说,我需要获取自特定日期以来创建的所有状态为“success”的文档。为了做到这一点,我有:

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

  range = new {
    ?
  }
};

我不知道该用什么做这个 range 部分。事实上,我甚至不确定 query 是正确的。我真的不明白在elasticsearch中,c#语法是如何Map到查询dsl的。感谢您的帮助。
谢谢您!

h5qlskok

h5qlskok1#

这样做应该:

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

fjaof16o2#

我真的不明白在elasticsearch中,c#语法是如何Map到查询dsl的。
通过查看提供的示例,我假设您想使用 PosData.Serializable(query) . 在这种情况下,查询对象(不管它是什么类型)将被json序列化并发布到elasticsearch集群,而不做任何修改。使用创建对象时 new {} c#语法它在默认情况下被序列化为json,其键与此对象的属性相同。也就是物体

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

将序列化并作为

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

因此,通过使用低级elasticsearch客户机,您可以创建具有几乎1:1Map的对象来查询dsl语法。您可以从elastic.co复制示例,将“:”替换为“=new”,从属性名中删除引号,基本上就是这样。

mtb9vblg

mtb9vblg3#

查询如下:

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

相关问题