【问题标题】:How to get documents by using date as the string comparison from elastic search?如何通过使用日期作为弹性搜索的字符串比较来获取文档?
【发布时间】:2020-10-14 04:23:18
【问题描述】:

我正在调用ElasticSearch 来获取文档,然后将其加载到内存中。 我有一个下面的代码,它使用DateRange,它说给我大于currentDocumentTime的文件。

ISearchResponse<DataHolder> docManifests = await queryClient.SearchAsync<DataHolder>(search => search
    .Index("full_processVersion")
    .Type("ProcessVersion")
    .Query(query => query
        .DateRange(dateRangeQuery => dateRangeQuery
            .Field("DocumentCreatedDate")
            .GreaterThan(currentDocumentTime.Value))));

现在我正在考虑是否有任何方法可以修改上述查询,以便在 currentDocumentTime 上使用 GreaterThan 查询而不是使用 currentDocumentTime - 我可以说给我所有文档,即 GreaterThanLessThan currentDocumentTime .

基本上想法是进行字符串比较,意思是给我 docs 任何与currentDocumentTime 不匹配的日期

例如,如果 currentDocumentTime10 月 10 日,假设有一些 10 月 9 日的文档,那么我也应该能够得到它。

这有可能吗?

【问题讨论】:

    标签: c# datetime elasticsearch


    【解决方案1】:

    您也可以在日期类型字段上使用term。所以,你的 elasticsearch 查询是这样的:

    {
     "query": {
       "bool": {
         "must_not": [
           {
             "term": {
                   "DocumentCreatedDate": "Your Requested time"
                 }
            }
         ]
       }
     }
    }
    

    【讨论】:

    • 我明白了。您能否提供一个示例,说明如何在上述查询代码中使用term。我最近开始使用 Elastic Search,所以对此有点困惑。
    • 嗨,不幸的是,我不是 C# 开发人员。但考虑到您的查询并阅读教程,我可以生成此查询。我希望这是真的。您的查询将是这样的:ISearchResponse&lt;DataHolder&gt; docManifests = await queryClient.SearchAsync&lt;DataHolder&gt;(search =&gt; search .Index("full_processVersion") .Type("ProcessVersion") .Query(query =&gt; !query .Term(p =&gt; p.DocumentCreatedDate,currentDocumentTime.Value)));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多