私はアプリエンジンでJavaを使用しています。SQLクエリ:
名前が「a%」のような人から*を選択します
Google App Engineでそれを書く方法は?
私はアプリエンジンでJavaを使用しています。SQLクエリ:
名前が「a%」のような人から*を選択します
Google App Engineでそれを書く方法は?
App Engineデータストア内のエンティティに対してクエリを実行しているとすると、Javaでは次LIKE "a%"のように書き換えます。
Query query = new Query("Person")
.addFilter("name", QueryFilterOperater.GREATER_THAN_OR_EQUAL, "a")
.addFilter("name", QueryFilterOperator.LESS_THAN, "b");
残りは演習として残されます。https://developers.google.com/appengine/docs/java/datastore/queriesをご覧ください
AppengineのデータストアではLIKE演算子はサポートされていません。
2つの解決策:
このようなクエリを実行するには、GoogleCloudSQLを使用する必要があります。
データストアを使用している場合、全文検索はサポートされていません。名前の可能なすべてのバリエーションを手動で作成し、それらを使用してエンティティを照会する必要があります。それらを特別なエンティティの複数値フィールドに保存するか(高価になる可能性があります)、この目的に完全に適合する特別な検索APIを使用できます(検索は部分文字列の一致をサポートしていないため、バリエーションをすべて同じように使用する必要があります)。
SearchAPIで機能する2つの単語は次のとおりです。
リストアイテムデータストアに個人エンティティを作成しますname
、という名前の検索インデックスPersonsに、フィールドpossible_namesとを使用して対応するドキュメントを作成しますentity_id(Document.doc_idを使用してエンティティのIDを保存することもできます)。possible_namesスペースで割った名前のすべての便利なバリエーションを保存します。
Personsインデックスをクエリして、フィールドがpossible_names検索文字列と一致するすべてのドキュメントを検索します。
フィールドentity_idフォームの結果のドキュメントを使用して、IDでデータストアからエンティティを取得します。
ここに小さな例があります。
これをお探しですか "select * from Person where name LIKE \"a%\""