php - Elasticsearch Range过滤器仅包含年份

标签 php elasticsearch elasticsearch-jdbc-river

我只需要使用 Elasticsearch 来过滤年份数据。我正在使用PHP来获取并显示结果。这是我的JSON格式数据

 {    loc_cityname: "New York",
    location_countryname: "US",
    location_primary: "North America"
    admitted_date  : "1994-12-10"
 },
     {    loc_cityname: "New York",
    location_countryname: "US",
    location_primary: "North America"
    admitted_date  : "1995-12-10"
 },

我正在使用以下代码按年份过滤值。
$options='{
    "query": {
        "range" : {
            "admitted_date" : {
                "gte" : 1994,
                "lte" : 2000
            }
        }
    }, 
    "aggs" : {
    "citycount" : {
        "cardinality" : {
            "field" : "loc_cityname",
            "precision_threshold": 100
    }
   }
  }
}';

我如何仅使用年份过滤结果。请有人帮我解决这个问题。

提前致谢,

最佳答案

您只需要像这样将 format parameter添加到range查询中:

$options='{
    "query": {
        "range" : {
            "admitted_date" : {
                "gte" : 1994,
                "lte" : 2000,
                "format": "yyyy"         <--- add this line
            }
        }
    }, 
    "aggs" : {
    "citycount" : {
        "cardinality" : {
            "field" : "loc_cityname",
            "precision_threshold": 100
    }
   }
  }
}';

更新
请注意,以上解决方案仅适用于ES 1.5及更高版本。在早期版本的ES中,您可以改用script过滤器:
$options='{
  "query": {
    "filtered": {
      "filter": {
        "script": {
          "script": "(min..max).contains(doc.admitted_date.date.year)",
          "params": {
            "min": 1994,
            "max": 2000
          }
        }
      }
    }
  },
  "aggs": {
    "citycount": {
      "cardinality": {
        "field": "loc_cityname",
        "precision_threshold": 100
      }
    }
  }
}';

为了能够运行此script过滤器,您需要确保已在elasticsearch.yml中启用脚本:
script.disable_dynamic: false

关于php - Elasticsearch Range过滤器仅包含年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33096762/

相关文章:

elasticsearch - elasticsearch-jdbc-river 的 sqlparams 的任何示例

php - 如何为 Laravel 设置文件权限?

javascript - 解释一下以下(2)个定时函数/脚本的区别

python - 如何扩展elasticsearch使其每秒可以索引大量文档?

search - 如何强制对Elasticsearch “terms”查询进行not_analyzed

elasticsearch - 为什么前缀返回没有特定前缀的文档?

php - MySQL count(*) 不返回具有相同输入的行

PHP PDO Postgres 与 Sqlite 列类型的计数 (*)

mysql - 使用 ElasticSearch 索引 MySQL 数据

mysql - Elasticsearch JDBC River MySQL连接超时