このトピックでは、SDK を使用して OpenSearch Vector Search Edition のインスタンスにアクセスし、データをクエリする方法を示すドキュメント検索デモについて説明します。次の方法でデータをクエリできます。
SQL ステートメントを実行する
import java.util.HashMap;
import java.util.Map;
import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;
/**
* @author alibaba
*/
public class SearchDoc {
public static void main(String[] args) throws Exception {
Config config = new Config();
// ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
config.setAccessUserName("<userName>");
// パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。
config.setAccessPassWord("<password>");
// OpenSearch インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605。
config.setInstanceId("<instanceID>");
// 内部エンドポイントを使用してインスタンスにアクセスするには、次の行のコメントを外してエンドポイントを指定します。
//config.setEndpoint("ha-cn-******.ha.aliyuncs.com");
// インターネット経由でインスタンスにアクセスするには、次の行のコメントを外して HTTP プロキシを指定します。
// config.setHttpProxy("http://Public IP address:Port number");
Client client = new Client(config);
try {
SearchRequestModel searchRequestModel = new SearchRequestModel();
SearchQuery searchQuery = new SearchQuery();
SQLQuery sqlQuery = new SQLQuery();
sqlQuery.setQuery("select * from table_odps");
Map<String, String> sqlQueryKvpairs = new HashMap<>();
sqlQueryKvpairs.put("trace", "INFO");
sqlQueryKvpairs.put("formatType", "full_json");
sqlQuery.setKvpairs(sqlQueryKvpairs);
searchQuery.setSql(client.buildSQLSearchQuery(sqlQuery));
searchRequestModel.setQuery(searchQuery);
SearchResponseModel searchResponseModel = client.Search(searchRequestModel);
System.out.println("result:" + searchResponseModel.getBody());
} catch (TeaException e) {
System.out.println(e.getMessage());
Map<String, Object> abc = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
}
}
}SQL クエリ文字列を使用する
import java.util.Map;
import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.Config;
import com.aliyun.ha3engine.models.SearchQuery;
import com.aliyun.ha3engine.models.SearchRequestModel;
import com.aliyun.ha3engine.models.SearchResponseModel;
import com.aliyun.tea.TeaException;
/**
* @author alibaba
*/
public class SearchDoc {
public static void main(String[] args) throws Exception {
Config config = new Config();
// ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
config.setAccessUserName("<userName>");
// パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。
config.setAccessPassWord("<password>");
// OpenSearch インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605。
config.setInstanceId("<instanceID>");
// 内部エンドポイントを使用してインスタンスにアクセスするには、次の行のコメントを外してエンドポイントを指定します。
//config.setEndpoint("ha-cn-******.ha.aliyuncs.com");
// インターネット経由でインスタンスにアクセスするには、次の行のコメントを外して HTTP プロキシを指定します。
// config.setHttpProxy("http://Public IP address:Port number");
Client client = new Client(config);
try {
SearchRequestModel searchRequestModel = new SearchRequestModel();
SearchQuery searchQuery = new SearchQuery();
searchQuery.setSql("query=select * from table_odps&&kvpair=trace:INFO;formatType:full_json");
searchRequestModel.setQuery(searchQuery);
SearchResponseModel searchResponseModel = client.Search(searchRequestModel);
System.out.println("result:" + searchResponseModel.getBody());
} catch (TeaException e) {
System.out.println(e.getMessage());
Map<String, Object> abc = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
}
}
}構築された HA クエリを実行する
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.*;
import com.aliyun.tea.TeaException;
/**
* @author alibaba
*/
public class SearchDoc {
public static void main(String[] args) throws Exception {
Config config = new Config();
// ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
config.setAccessUserName("<userName>");
// パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。
config.setAccessPassWord("<password>");
// OpenSearch インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605。
config.setInstanceId("<instanceID>");
// 内部エンドポイントを使用してインスタンスにアクセスするには、次の行のコメントを外してエンドポイントを指定します。
//config.setEndpoint("ha-cn-******.ha.aliyuncs.com");
// インターネット経由でインスタンスにアクセスするには、次の行のコメントを外して HTTP プロキシを指定します。
// config.setHttpProxy("http://Public IP address:Port number");
Client client = new Client(config);
try {
HaQuery haQuery = new HaQuery();
// インデックスとクエリコンテンツを含む query 句を指定します。
haQuery.setQuery("id:8148508889615505646");
// リクエスト対象のクラスターの名前を指定します。
haQuery.setCluster("general");
// aggregate 句を指定します。
ArrayList<HaQueryAggregateClause> aggregateClauses = new ArrayList<>();
HaQueryAggregateClause agg = new HaQueryAggregateClause();
agg.setGroupKey("cate_id"); // 集計対象のフィールドを指定します。
agg.setAggFun("count()"); // 集計関数を指定します。
agg.setAggFilter("cate_id=1"); // 集計フィルターを指定します。
agg.setRange("0~10"); // 集計範囲を指定します。
agg.setAggSamplerThresHold("5"); // サンプリング集計のしきい値を指定します。
agg.setAggSamplerStep("5"); // サンプリングのステップサイズを指定します。
agg.setMaxGroup("5"); // 返されるグループの最大数を指定します。
// 1 つ以上の Aggregate オブジェクトを追加します。
aggregateClauses.add(agg);
haQuery.setAggregate(aggregateClauses);
// distinct 句を指定します。
ArrayList<HaQueryDistinctClause> DistinctClauses = new ArrayList<>();
HaQueryDistinctClause dist = new HaQueryDistinctClause();
dist.setDistKey("cate_id"); // 抽出するフィールドの名前を指定します。
dist.setDistCount(1); // 抽出されるドキュメントの数を指定します。
dist.setDistTimes(1); // 抽出回数を指定します。
dist.setReserved(false); // 抽出後に残りのドキュメントを保持するかどうかを指定します。
dist.setUpdateTotalHit(false); // reserved パラメーターが false に設定されている場合、破棄されたドキュメントの数を totalHits パラメーターの値から差し引くかどうかを指定します。
dist.setDistFilter("cate_id<=3"); // 抽出するドキュメントを選択するために使用するフィルター条件を指定します。
dist.setGrade("1.2"); // distinct 抽出のしきい値を指定します。
// 1 つ以上の Distinct オブジェクトを追加します。 dist パラメーターの値は一意である必要があります。
DistinctClauses.add(dist);
haQuery.setDistinct(DistinctClauses);
// 並べ替え条件を指定します。
ArrayList<HaQuerySortClause> SortList = new ArrayList<>();
HaQuerySortClause sorter = new HaQuerySortClause();
// 並べ替えるフィールドを指定します。
sorter.setSortKey("id");
// 並べ替え順序を指定します。プラス記号 (+) は昇順を示します。マイナス記号 (-) は降順を示します。
sorter.setSortOrder("+");
// 1 つ以上の並べ替え条件を指定します。
SortList.add(sorter);
haQuery.setSort(SortList);
// Config オブジェクトを作成し、config 句を使用してページングのパラメーターと戻り結果のデータ形式を構成します。
HaQueryconfigClause Queryconfig = new HaQueryconfigClause();
Queryconfig.setStart("1");
Queryconfig.setHit("100");
// 戻り結果の形式を指定します。XML、JSON、Protobuf などの形式がサポートされています。
Queryconfig.setFormat("JSON");
// CustomConfig オブジェクトのパラメーターを構成します。
Map<String, String> CustomConfig = new HashMap<>();
CustomConfig.put("no_summary", "yes");
CustomConfig.put("qrs_chain", "search");
Queryconfig.setCustomConfig(CustomConfig);
haQuery.setConfig(Queryconfig);
// フィルター条件を指定します。
// 1 つ以上のフィルター条件を指定できます。複数のフィルター条件を指定する場合は、AND または OR を使用してフィルター条件を結合します。
// 次の演算子がサポートされています。'= > < <= >= !=
haQuery.setFilter("id>100 AND id<=1000");
// kvpairs 句のパラメーターを指定します。
Map<String, String> haKvpairs = new HashMap<>();
haKvpairs.put("duniqfield", "cate_id");
haQuery.setKvpairs(haKvpairs);
// カスタムクエリ句を指定します。
Map<String, String> CustomQuery = new HashMap<>();
CustomQuery.put("searcher_cache", "use:no");
haQuery.setCustomQuery(CustomQuery);
SearchRequestModel searchRequestModel = new SearchRequestModel();
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(client.buildHaSearchQuery(haQuery));
searchRequestModel.setQuery(searchQuery);
SearchResponseModel responseModel = client.Search(searchRequestModel);
System.out.println("result:" + responseModel.getBody());
} catch (TeaException e) {
System.out.println(e.getMessage());
Map<String, Object> abc = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
}
}
}HA クエリ文字列を使用する
import java.util.Map;
import com.aliyun.ha3engine.Client;
import com.aliyun.ha3engine.models.Config;
import com.aliyun.ha3engine.models.SearchQuery;
import com.aliyun.ha3engine.models.SearchRequestModel;
import com.aliyun.ha3engine.models.SearchResponseModel;
import com.aliyun.tea.TeaException;
/**
* @author alibaba
*/
public class SearchDoc {
public static void main(String[] args) throws Exception {
Config config = new Config();
// ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] タブで確認できます。
config.setAccessUserName("<userName>");
// パスワード。パスワードは、[インスタンスの詳細] ページの [API エンドポイント] タブで変更できます。
config.setAccessPassWord("<password>");
// OpenSearch インスタンスの名前。インスタンス名は、[インスタンスの詳細] ページの左上隅に表示されます。例: ha-cn-i7*****605。
config.setInstanceId("<instanceID>");
// 内部エンドポイントを使用してインスタンスにアクセスするには、次の行のコメントを外してエンドポイントを指定します。
//config.setEndpoint("ha-cn-******.ha.aliyuncs.com");
// パブリックエンドポイントを使用してインスタンスにアクセスするには、次の行のコメントを外してエンドポイントを指定します。
//config.setEndpoint("ha-cn-******.public.ha.aliyuncs.com");
// インターネット経由でインスタンスにアクセスするには、次の行のコメントを外して HTTP プロキシを指定します。
// config.setHttpProxy("http://Public IP address:Port number");
Client client = new Client(config);
try {
SearchRequestModel haQueryRequestModel = new SearchRequestModel();
SearchQuery haRawQuery = new SearchQuery();
haRawQuery.setQuery("query=index_id:1&&config=start:0,hit:100,format:json&&cluster=general");
haQueryRequestModel.setQuery(haRawQuery);
SearchResponseModel responseModel = client.Search(haQueryRequestModel);
System.out.println("result:" + responseModel.getBody());
} catch (TeaException e) {
System.out.println(e.getMessage());
Map<String, Object> abc = e.getData();
System.out.println(com.aliyun.teautil.Common.toJSONString(abc));
}
}
}