Java Elasticsearch-在查询中作为参数传递数组
我尝试在Elasticsearch中使用数组作为查询参数进行查询。例如,我想在“水果”字段中搜索[苹果、橘子、菠萝]。但在我的例子中,我想搜索一系列公司ID。我提出了这个问题:Java Elasticsearch-在查询中作为参数传递数组,java,
elasticsearch,Java,
elasticsearch,我尝试在Elasticsearch中使用数组作为查询参数进行查询。例如,我想在“水果”字段中搜索[苹果、橘子、菠萝]。但在我的例子中,我想搜索一系列公司ID。我提出了这个问题: { "query":{ "bool":{ "must":[ { "range":{ "eventconnected":{ "f
{
"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
...
我现在正好有时间测试一下,它就像一个符咒,你又一次救了我的命。Val:D看来我需要更多地研究ElasticSearch,因为它不像我想的那么直接。。。所以,要搜索数组,我需要使用termsQuery而不是matchQuery?有什么原因可以解释为什么matchQuery不能处理数组吗?我刚刚检查了,现在它更有意义了,谢谢你!在我进一步研究我的项目之前,我肯定会继续学习更多关于ES的内容。匹配查询使用字符串中的单词,您可以使用以下输入字符串的匹配查询
“157 160”
,但对于数组,使用术语查询更容易发送。