Cloudsearch日期范围

时间:2017-07-14 18:25:37

标签: amazon-web-services amazon-cloudsearch

我有以下格式的cloudsearch文档,我使用的是简单的queryParser。因此,当我搜索' abc'时,我得到两个结果,因为两个文件包含名字为" abc"。如何将其提升到新的水平并为查询添加日期范围?有点像,我想搜索" abc"两个日期之间的开始> = date1并开始< DATE2。我能想到的一种方法是在上传文档之前,将开始的字段转换为timeinMillis,然后执行一个范围。这是解决这个问题的唯一方法吗?还是我可以为日期建立范围吗?

  {
    "id": "d48810e8-082a-4422-887c-a3a69aa95f3e",
    "fields": {
      "origin": [
        "http://localhost:3006"
      ],
      "firstname": [
        "abc"
      ],
      "started": [
        "2017-03-30T15:45:03.848Z"
      ],
      "lastname": [
        "xyz"
      ]
    }
  },
  {
    "id": "47ae007e-41ec-4110-82f1-716d4e48670c",
    "fields": {
      "origin": [
        "http://localhost:3006"
      ],
      "firstname": [
        "opq"
      ],
      "lastname": [
        "rst"
      ],
      "started": [
        "2017-01-09T20:00:47.264Z"
      ]
    }
  },
  {
    "id": "6a6df5be-9518-44f4-8b9d-62ff21c5e89c",
    "fields": {
      "origin": [
        "http://localhost:3006"
      ],
      "firstname": [
        "abc"
      ],
      "lastname": [
        "xyz"
      ],
      "started": [
        "2017-01-18T19:09:01.318Z"
      ]
    }
  }

1 个答案:

答案 0 :(得分:1)

CloudSearch支持date字段类型(docs)。使用它以及转换为millis的所有顾虑都会消失。

要搜索日期范围,请使用range语法(docs),例如 started:['2013-01-01T00:00:00Z',}在该日期之后搜索started的条目

使用布尔运算符(例如(AND firstname :'abc' started:['2013-01-01T00:00:00Z',}))将其与文本查询相结合,并确保使用结构化查询解析器