3

このクエリでインデックス付きドキュメントを検索しようとしていますが、アイテムが存在するにもかかわらず、結果が 0 になりました。なんで?

説明欄でのキーワード検索や年代別検索が機能します。'sbu' はアトム フィールドです。

ログ

INFO: Searching with query:  year:( 2013  )  sbu:(Special Bictums Unit) 
Oct 31, 2013 8:36:17 PM com.mwv.pic.service.SearchService search
INFO: results.size:0

INFO: Searching with query:  year:( 2013  )  sbu:("Special Bictums Unit") 
INFO: results.size:0

INFO: Searching with query:  sbu:("Special Bictums Unit") 
INFO: results.size:0

INFO: Searching with query:  sbu:"Special Bictums Unit" 
INFO: results.size:0

INFO: Searching with query:  year:( 2013  ) 
INFO: results.size:3

コード

    log.info("Searching with query: " + q);
    try {
        Results<ScoredDocument> results = getIndex().search(q);
        log.info("results.size:"+results.getNumberReturned());

管理コンソールのインデックス

イムグル

参照

https://developers.google.com/appengine/docs/java/search/query_strings

インデックス値

Nov 04, 2013 5:55:44 PM com.mwv.pic.service.SearchService indexStudy
INFO: add field sbu:'Special Bictums Unit'

builder.addField(Field.newBuilder().setName("sbu").setAtom(sbu));
log.info("add field sbu:'"+sbu+"'");
4

2 に答える 2

5

空白を含むアトム フィールドの検索は、現在 Java dev サーバーでは機能しません。しかし、本番環境と Python 開発サーバーでは動作すると思います。

推奨されるクエリ構文は次のとおりです: [sbu:"Special Bictums Unit"] (角括弧なし)。

于 2013-11-07T01:51:51.173 に答える
2

私はプラットフォームに精通していませんが、ドキュメントでは、複数の値を使用ORまたはAND検索する場合にのみ、値の周りに括弧が含まれていることを示唆しているようです。year: 2013の代わりにyear:( 2013 )、またはのsbu: "Special Bictums Unit"代わりに使用してみてくださいsbu:("Special Bictums Unit")

また、検索クエリの周りに追加のスペースがあるようです。それが問題だとは思いませんがtrim()、文字列を呼び出して、これらのないバージョンを返すことができますq = q.trim();

ドキュメントから:

空白または特殊文字を含む Atom フィールドを検索する場合は、値を引用符で囲みます。

アンパサンドを検索するには、引用符で囲む必要があるように思われます (例: "&". ただし、atom フィールドの一部だけを検索することはできません。

アトム フィールドの唯一の有効な関係演算子は等値演算子です。アトム フィールドの完全な内容は、クエリの値と一致する必要があります。

アンパサンドを含むすべてのフィールドを検索する場合は、テキストまたは HTML フィールドである必要があります。おそらく、特殊文字と引用符に関する規則がこれらにも適用されます。

于 2013-11-03T17:20:36.923 に答える