0

App Engine で検索サービスを使用しようとしています... 数値演算子を使用しようとすると問題が発生しました。InvalidRequest エラーが発生します。

最初は自分のクエリとは別のものだと思っていましたが、ドキュメントの例を使用すると同じ結果が得られます。

たとえば、これは機能します:

著者:「ローズ ジョーンズ」の長さ = 15

しかし、ドキュメントから直接コピーしたこの例では、InvalidRequest エラーがスローされます。

著者:「ローズ ジョーンズ」の長さ > 15

私が知る限り、= 以外の演算子は機能していません。

誰でも助けることができますか?:)

編集 - リクエストごとのコード:

INDEX_NAME = 'sample'

query_string = 'author:"Rose Jones" length > 15'

logging.info('final query string: '+query_string)

try:
    results = search.Index(name=INDEX_NAME).search(query_string)
except search.Error:
    logging.exception('Search failed')
    self.errorManager.add('search6')
4

2 に答える 2

1

OK、私は問題を見つけたと思います。ちょっとばかげているように聞こえるかもしれませんが (私にとっては!)、次のようになります。

= 以外の演算子を使用するには、フィールドがスキーマ/インデックスのどこかに既に存在している必要があるようです。

したがって、長さ > 15 と言う場合は、属性として「長さ」を含むドキュメントが必要です。そうしないと失敗します。

length = 15 は同じ苦情を出さず、ゼロの結果を返すだけです。

私は基本的にクエリコンストラクターを構築していて、構文をチェックするために検索に対してクエリを投げていました...あるタイプのクエリが受け入れられ、他のタイプは受け入れられなかったため、構文の問題があると思いましたが、それ以外の比較のようですとにかく、現時点では、インデックス内の一致するデータが必要です。

于 2012-09-06T18:45:13.183 に答える
-1

Javaのフィルターに関するドキュメントをご覧ください。

Query q = pm.newQuery(Person.class);
q.setFilter("height < 72");

または Python の場合はこちら

q.filter('height >', 42).filter('city =', 'Seattle')
q.filter('user =', users.get_current_user())
于 2012-09-06T17:56:36.933 に答える