[created_utc]之后的Elasticsearch [match]未知令牌[START_OBJECT]

时间:2018-08-08 03:27:10

标签: elasticsearch

我正在学习如何使用pushshift.io的2006年reddit评论数据集使用Elasticsearch。

created_utc是创建注释时间的字段。

我正在尝试获取特定时间范围内的所有帖子。我在Google上搜索了一下,发现我需要使用“范围”关键字。

这是我现在的查询

$.ajax({
    url: '/item/ajax/approve/',
    data: {
      'reply': reply,
      'item': item,
      'user_type': userType,
    },
    type: "POST",
    dataType: 'json',
    success: function (data) {
        var successMsg = data.message 
        if (data.status){
            successMsg = successMsg + "<br/><br/><i class='fa fa-spin fa-spinner'></i> Redirecting..." //<i class> - 'font awesome'
        }

        if (data.next_url){
            if ($.alert){  // if alert message is installed
            $.alert(successMsg)
            } else {
                alert("")
            }
            redirectToNext(data.next_url, 1500)  
        } else {
            location.reload();
        }


    }
  });

然后我尝试使用布尔查询,以便我可以将时间范围与已编辑的内容一定不能为False(已编辑是一个布尔型字段,告诉我帖子是否已被编辑):

{
    "query": {
        "match" : {
            "range": {
                "created_utc": {
                    "gte": "1/1/2006",
                    "lte": "31/1/2006",
                    "format": "dd/MM/yyyy"
                }
            }
        }
    }
}

但是,这给了我一个我不知道的错误:

[已编辑]查询格式错误,查询名称后没有start_object

如果有人可以帮助我,我将不胜感激,谢谢!

这是我对评论的映射,如果有帮助的话:

{
    "query": {
        "bool" : {
            "must" : {
                "range" : {
                    "created_utc": {
                        "gte" : "01/12/2006", "lte": "31/12/2006", "format": "dd/MM/yyyy" 
                    }
                }
            },
            "must_not": {
                "edited": False
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果要获取某个时间范围内的所有帖子,则必须使用范围查询。查询的问题是您在弹性查询中不允许使用的匹配查询中使用range,因此您的查询应类似于:

{
  "query": {
    "range": {
      "created_utc": {
          "gte": 1136074029,
          "lte": 1136076410
      }
    }
  }
}

提供 created_utc 字段已保存为纪元这一事实,您必须使用纪元格式进行查询。

您要在编辑不得为假的范围内查找帖子的第二个查询:

{
  "query": {
    "bool": {
      "must": [
          {
            "range": {
              "created_utc": {
                "gte": 1136074029,
                "lte": 1136076410
              }
            }
          }
      ],
      "must_not": [
        {
          "match": {
            "edited": false
          }
        }
      ]
    }
  }
} 

注意:如果您的 created_utc dd / MM / yyyy 格式存储,则在查询时应使用strict companion format ,即您应该给2006年1月1日,而不是1/1/2006。

希望这会有所帮助!