2017-07-14 173 views
0

我使用以下格式的雲搜索文檔,並使用簡單的queryParser。所以,當我搜索'abc'時,我得到兩個結果,因爲兩個文檔包含名字爲「abc」。我如何將它帶到下一個級別並向查詢添加日期範圍?類似的,我想在兩個日期之間搜索「abc」,其中開始> = date1並開始< date2。我能想到的一種方法是在上傳文檔之前,將開始的字段轉換爲timeinMillis,然後執行一個範圍。這是唯一的方法來解決這個問題,或我可以建立日期的範圍?Cloudsearch日期範圍

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

CloudSearch支持date字段類型(docs)。使用這個和所有關於轉換millis的顧慮都會消失。

要搜索的日期範圍,使用range語法(docs),例如 started:['2013-01-01T00:00:00Z',}該日期

後搜索與started條目再加上使用布爾運算符的文本查詢,如(AND firstname :'abc' started:['2013-01-01T00:00:00Z',})並肯定要使用結構化查詢解析器

+0

感謝@alexroussos的響應。唯一的問題是,我想在文檔的任何字段中搜索'abc',而不僅僅是名字。由於我現在使用簡單的查詢解析器,因此我的cloudsearch將返回包含任何值的「abc」的所有文檔。 – Rama

+0

然後不要指定該字段。來自'q.options'的文檔:_如果在搜索中沒有指定字段並且未指定此選項,則會搜索所有靜態配置的文本和文本數組字段._ http://docs.aws.amazon.com/ cloudsearch/latest/developerguide/search-api.html – alexroussos

+0

聽起來很不錯。謝謝你的幫助。 – Rama