私はelasticsearchの上にWebアプリを構築しました。Javaを使用して複数のフィルターを実行したいと思います。
エラスティックサーチ クエリ:
{
"query": {
"bool": {
"must": [
{"match": {
"T": "TEXT"},
"match": {
"new_content": "TEXT"
}
},
],
"filter": {
"term": {
"collection1": "xyz"
},
"term": {
"collection2": "abc"
}
collection
2 つの異なる値 (たとえば、"xyz" と "abc") を持つ同じフィールドをフィルター処理するようにクエリをフィルター処理したい
現在、単一フィルター用の Java プログラムをコーディングしています。
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.simpleQueryStringQuery(query).field("newContent").field("T"))
.filter(QueryBuilders.termQuery(Collection1, "abc"));
複数の値の同じフィールドでクエリをフィルター処理するにはどうすればよいですか?
編集:
実際に私の Web アプリでは、コレクションの値を次のように抽出しました。
String[] Collection=request.getParameterValues("site");
コレクションは私のelasticsearchドキュメントのフィールドです。germany_collection Collection[0]
(value:true)Collection[1]
が usa_collection(value:true) であるとします。germany_collection:true および usa_collection:true の場合に結果が得られるように、ドキュメントをフィルター処理するクエリを作成したいと考えています。
これは私のオリジナルのプログラムです:
public StringBuffer getJson(String query, String start, String [] Collection{
Client client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.simpleQueryStringQuery(query).field("newContent").field("T"))
.filter(QueryBuilders.termQuery(Collection[0], "true").filter(QueryBuilders.termQuery(Collection[1], "true");
しかし、このフィルターを適用すると、このエラーが発生しますThe method filter(TermsQueryBuilder) is undefined for the type TermsQueryBuilder
。メソッドレシーバーにキャストを追加すると書かれています。