c# - ElasticSearch过滤查询

标签 c# .net elasticsearch

我创建了一个 flex 搜索索引,简单搜索的结果如下所示:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 11,
    "max_score": 1,
    "hits": [
      {
        "_index": "shop-bestellung",
        "_type": "bestellung",
        "_id": "dc144b04-8e73-4ea5-9f73-95c01768fd26",
        "_score": 1,
        "_source": {
          "id": "dc144b04-8e73-4ea5-9f73-95c01768fd26",
          "bestellnummer": "B-20170302-026",
          "shopid": "0143d767-8986-432a-a15d-00e1c4862b24",
          "shopname": "DeeDa",
          "erstelltVon": "5663bb4b-fc44-46ca-b875-a3487b588b24",
          "bestellername": "Max Mann",
          "bestelldatum": "2017-01-30T23:00:00Z",
          "bestellpositionen": []
        }
      }
    ]
  }
}

我试图创建一个过滤器,该过滤器应具有以下三个限制:
  • 查询文本
  • 日期范围
  • 过滤特定字段:“erstelltVon”

  • 我的过滤器仅包含查询文本和日期范围:
    {  
       "query":{  
          "query_string":{  
             "fields":[  
                "bestellnummer",
                "bestellername",
                "bestelldatum",
                "erstelltVon",
                "bestellpositionen.artikelname",
                "bestellpositionen.artikelnummer",
                "bestellpositionen.referenznummer"
             ],
             "query":"*"
          }
       },
        "filter": {
            "range" : {
                "bestelldatum" : {
                    "gte": "2017-02-04T23:00:00Z",
                    "lte": "now",
                    "time_zone": "+01:00"
                }
            }
        }
    }
    

    我想添加第三个过滤器:

    “erstelltVon”:“5663bb4b-fc44-46ca-b875-a3487b588b24”

    我怎样才能做到这一点?

    最佳答案

    您需要使用boolean filter

    使用方法如下:

      "filter": {
        "bool" : {
          "must": [
            // FIRST FILTER
            {
              "range" : {
                "bestelldatum" : {
                  "gte": "2017-02-04T23:00:00Z",
                  "lte": "now",
                  "time_zone": "+01:00"
                }
              }
            },
            {
              // YOUR OTHER FILTER HERE
            }
          ]
        }
    

    如果要使用“或”而不是“与”,请将“必须”更改为“应该”。

    关于c# - ElasticSearch过滤查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116213/

    相关文章:

    C#6错误?虚拟新方法奇怪的行为

    c# - 如何完全运行 UWP 应用程序后台

    c# - 如果目录中已存在文件夹,如何增加文件夹编号

    c# - 如何使用 C#/.NET 的反射在程序集中实例化类?

    elasticsearch - 如何在 Dataproc 中访问 SparkContext?

    ruby-on-rails - 索引无事件记录的Elasticsearch

    c# - 如何使用 Graphics.Draw 高效渲染图 block ?

    C#:获取完整的桌面大小?

    c# - 使用 LINQ 按位置组合两个列表中的条目

    elasticsearch - [fields]的映射定义具有不受支持的参数:[analyzer:case_sensitive]