我正在学习如何使用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
}
}
}
}
答案 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。
希望这会有所帮助!