2017-07-14 24 views
0

次の形式のクラウド検索ドキュメントがあり、単純なqueryParserを使用しています。だから、私が 'abc'を検索すると、2つの文書がfirstnameを "abc"として含むので2つの結果が得られます。次のレベルに引き上げて、クエリに日付範囲を追加するにはどうすればよいですか?何かのように、私は2つの日付の間に "abc"を検索したいのですが、開始時刻= = date1で、< date2を開始しました。私が考えることのできるアプローチの1つは、ドキュメントをアップロードする前に、開始されたフィールドをtimeinillisに変換して範囲を変更することです。それがこれに近づく唯一の方法ですか、あるいは日付の範囲を作ることもできますか?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への変換に関する懸念事項をすべて使用してください。 、あなたのテキストクエリでブール演算子を使用していることを組み合わせるなど(AND firstname :'abc' started:['2013-01-01T00:00:00Z',})と作るその日

startedを持つエントリを検索するには、日付範囲を検索range構文(docs)を使用し、例えば started:['2013-01-01T00:00:00Z',}する

構造化されたクエリパーサーを使用してください

+0

応答に感謝@alexroussos。その唯一の問題は、firstnameだけでなく、ドキュメント内のどのフィールドでも 'abc'を検索したいということです。私は今、単純なクエリパーサーを使用しているので、私のcloudsearchは、 'abc'を含むすべてのドキュメントを任意の値で返します。 – Rama

+0

フィールドを指定しないでください。 'q.options'のドキュメントから:_検索にフィールドが指定されておらず、このオプションが指定されていなければ、静的に設定されたすべてのテキストとテキスト配列フィールドが検索されます._ http://docs.aws.amazon.com/ cloudsearch/latest/developerguide/search-api.html – alexroussos

+0

良いアイデアのように聞こえます。ご協力いただきありがとうございます。 – Rama