如何在elasticsearch DSL查询中过滤不
How to filter not in elasticsearch DSL query
DSL查询如下
{'from': 0, 'size': 10, 'aggs':
{'products': {'terms': {'field': 'softwares.name.keyword', 'order': {'_key': 'desc'}}},
'color': {'terms': {'field': 'white.name.keyword', 'order': {'_key': 'desc'}}},
'types': {'terms': {'field': 'mercedez.name.keyword', 'order': {'_key': 'desc'}}}},
'query': {'bool': {'must': {'match_all': {}},
'filter': [{'term': {'name.keyword': 'Germany'}}]}}}
- 在上面的查询中过滤掉名字是德国
'filter': [{'term': {'name.keyword': 'Germany'}
我的问题?
- 如何做相反的事情。
filter not
您可以使用 must_not 查询和 bool 查询。
选项 1:使用过滤器
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"bool": {
"must_not": [
{
"term": {
"name.keyword": {
"value": "Germany"
}
}
}
]
}
}
]
}
}
}
选项 2:不带过滤器(但此处德国查询也会被考虑用于分数计算)
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not": [
{
"term": {
"name.keyword": {
"value": "Germany"
}
}
}
]
}
}
}
DSL查询如下
{'from': 0, 'size': 10, 'aggs':
{'products': {'terms': {'field': 'softwares.name.keyword', 'order': {'_key': 'desc'}}},
'color': {'terms': {'field': 'white.name.keyword', 'order': {'_key': 'desc'}}},
'types': {'terms': {'field': 'mercedez.name.keyword', 'order': {'_key': 'desc'}}}},
'query': {'bool': {'must': {'match_all': {}},
'filter': [{'term': {'name.keyword': 'Germany'}}]}}}
- 在上面的查询中过滤掉名字是德国
'filter': [{'term': {'name.keyword': 'Germany'}
我的问题?
- 如何做相反的事情。
filter not
您可以使用 must_not 查询和 bool 查询。
选项 1:使用过滤器
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"bool": {
"must_not": [
{
"term": {
"name.keyword": {
"value": "Germany"
}
}
}
]
}
}
]
}
}
}
选项 2:不带过滤器(但此处德国查询也会被考虑用于分数计算)
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"must_not": [
{
"term": {
"name.keyword": {
"value": "Germany"
}
}
}
]
}
}
}