【问题标题】:Cloudsearch Date range云搜索日期范围
【发布时间】:2017-07-18 04:22:04
【问题描述】:

我有以下格式的 cloudsearch 文档,我正在使用简单的 queryParser。因此,当我搜索“abc”时,我得到两个结果,因为两个文档包含名字为“abc”。我怎样才能把它提升到一个新的水平,并在查询中添加一个日期范围?例如,我想在开始 >= date1 和开始

  {
    "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"
      ]
    }
  }

【问题讨论】:

    标签: amazon-web-services amazon-cloudsearch


    【解决方案1】:

    CloudSearch 支持 date 字段类型 (docs)。使用它,您对转换为毫秒的所有担忧都会消失。

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

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

    【讨论】:

    • 感谢@alexroussos 的回复。唯一的问题是,我想在文档的任何字段中搜索“abc”,而不仅仅是名字。由于我现在使用的是简单的查询解析器,所以我的 cloudsearch 会返回所有包含任何值的 'abc' 的文档。
    • 那么不要指定字段。来自q.options 上的文档:如果在搜索中未指定任何字段且未指定此选项,则会搜索所有静态配置的文本和文本数组字段。 docs.aws.amazon.com/cloudsearch/latest/developerguide/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多