我正在尝试使用java构建一个查询,该查询按列表过滤所有命中。假设我有一个不同名称的列表,现在我想构建一个查询,它返回列表中存储的名称的所有元素。由于此列表中将有100多个名称,我只想将整个列表传递给我的查询。
首先,我尝试在elasticsearch head插件中构建一个原始查询,以便我更容易将其实现到java中。
目前我的原始查询如下所示:
{
"query": {
"bool": {
"filter": {
"term": {
"name": {
"value": [
"name1",
"name2"
]
}
}
}
}
}
}
我知道我至少有一个名为“name1”的元素,“name2”相同。但是这个查询不会返回任何内容。我究竟做错了什么?
谢谢,Asiemie
term
查询不支持值数组。但是,terms
可以这样做,你可以做到以下几点:
{
"query": {
"bool": {
"filter": {
"terms": {
"name": [
"name1",
"name2"
]
}
}
}
}
}
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html
您还可以将术语查询包装到bool
- > should
查询中,如下所示:
{
"query": {
"bool": {
"filter": {
"bool": {
"should": [
{
"term": {
"name": "name1"
}
},
{
"term": {
"name": "name2"
}
}
]
}
}
}
}
}