我已經在elasticsearch之上構建了一個web應用程序。我想用Java來做一個多重過濾器。如何在使用Java的Elasticsearch中執行多個過濾器查詢?
Elasticsearch查詢:
{
"query": {
"bool": {
"must": [
{"match": {
"T": "TEXT"},
"match": {
"new_content": "TEXT"
}
},
],
"filter": {
"term": {
"collection1": "xyz"
},
"term": {
"collection2": "abc"
}
我要過濾的查詢,例如,它應該在同一領域collection
篩選與兩個不同的值(例如,「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文檔領域。假設Collection[0]
是germany_collection(值:true),Collection[1]
是usa_collection(值: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
。它說添加到方法接收器。
對不起。我搞砸了一個恰當的問題。你能檢查我的編輯部分嗎? – Rose
我已經更新了我的答案。 – Val
它工作。謝謝。由於缺少右括號而出現錯誤。再次感謝 – Rose