[英]Elasticsearch - passing an array as argument in a query
我正在嘗試使用數組作為查詢的參數在Elasticsearch中進行查詢。 例如,我想在“水果”字段中搜索[蘋果,橙子,菠蘿]。 但在我的情況下,我想搜索一系列companyIds。 我提出了這個問題:
{
"query":{
"bool":{
"must":[
{
"range":{
"eventconnected":{
"from":"2018-11-21T15:00:00.023Z",
"to":"2018-11-22T15:00:00.023Z",
"include_lower":true,
"include_upper":true,
"boost":1.0
}
}
},
{
"match":{
"idunity":{
"query":[
"157",
"160"
],
"operator":"OR",
"prefix_length":0,
"max_expansions":50,
"fuzzy_transpositions":true,
"lenient":false,
"zero_terms_query":"NONE",
"auto_generate_synonyms_phrase_query":true,
"boost":1.0
}
}
}
],
"adjust_pure_negative":true,
"boost":1.0
}
}
}
當我運行此查詢時,我收到以下錯誤:
{"error":{"root_cause":[{"type":"parsing_exception","reason":"[match] unknown token [START_ARRAY] after [query]","line":20,"col":30}],"type":"parsing_exception","reason":"[match] unknown token [START_ARRAY] after [query]","line":20,"col":30},"status":400}
就好像我不能將數組作為查詢的參數傳遞一樣。 所以我的問題是:在ElasticSearch中將數組作為查詢參數傳遞的正確方法是什么?
為了給出更多的上下文:我在java項目中這樣做,這個查詢的searchSourceBuilder如下:locaisTemp是我試圖作為參數傳遞的數組。
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders
.boolQuery()
.must(QueryBuilders
.rangeQuery("eventconnected")
.from(tempDate0.getTime())
.to(tempDate.getTime()))
.must(QueryBuilders
.matchQuery("idunity", locaisTemp))
);
使用termsQuery
而且你應該使用filter()
而不是must()
因為你只是過濾:
...
.filter(QueryBuilders
^ .termsQuery("idunity", locaisTemp))
| ^
| |
change this
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.