Search API を使用して、Google App Engine で単純な Date クエリを実行しようとしています。私が達成しようとしているのは、特定の日付に等しいフィールドを持つすべてのドキュメントのリストを取得することだけです...
// Prepare the Query
String searchString = "date = 2013-08-26";
Query query = Query.newBuilder().build(searchString);
// Get the Date_Search Index
IndexSpec indexSpec = IndexSpec.newBuilder().setName("Date_Search").build();
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
// Perform the search
Results<ScoredDocument> results = index.search(query);
上記のコードを実行すると、結果が返されません。ただし、date >= 2013-08-26 && date < 2013-08-27
代わりにクエリを変更すると、期待される結果が返されます。日付の等価ロジックが機能していないようです。
これは、インデックス内のドキュメントのリストです...
DocId OrderId date event_key
3d4e5691-8fb9-42de-bf09-f2303236f091 84288787 2013-08-25 641.0
7e4700fe-dee1-4579-87c5-69b1b1929f39 84288787 2013-08-25 650.0
8c9ca43d-7673-4f12-9f0b-e3328cbdaa85 84288787 2013-08-26 659.0
04fa8025-e01b-42d3-9bf9-21c3d9618ca7 84288787 2013-08-26 668.0
41465d1f-6d8a-431f-b226-141c8d72c064 84288787 2013-08-26 676.0
1ba01a6b-0890-43b3-8225-0ed196b6ee80 84288787 2013-08-27 676.0
a8ef18b1-ffa5-4823-8442-852f7142cad1 84288786 2013-08-25 633.0
2013 年 8 月 26 日の日付で 3 つのドキュメントが返されることを期待しています。等式で実行するとdate = 2013-08-26
結果はありませんが、クエリdate >= 2013-08-26 && date < 2013-08-27
は予想される 3 つの結果を返します。
ドキュメントは、次のコードを使用してインデックスに追加されました...
// Build the Date
Calendar calendar = Calendar.getInstance();
Date dateObject = calendar.getTime();
// Create the Document
Builder builder = Document.newBuilder();
builder.addField(Field.newBuilder().setName("event_key").setNumber(eventKey));
builder.addField(Field.newBuilder().setName("date").setDate(dateObject));
Document document = builder.build();
// Get the Date_Search Index
IndexSpec indexSpec = IndexSpec.newBuilder().setName("Date_Search").build();
Index index = SearchServiceFactory.getSearchService().getIndex(indexSpec);
// Store the Document
index.put(document);
Search API Documentationによると、日付フィールドは保存され、YYYY-MM-DD の精度でのみクエリ可能です (時間情報は、保存およびクエリ時に取り除かれます)。さらに、日付フィールドのクエリ ドキュメントには、日付等価クエリがサポートされていることが示されています。
誰かが問題が何であるかを理解するのを手伝ってくれませんか.