[英]Elastic Search combination of Range and Term filters
I want to have a filter to return documents with 're_max' > 100
and language_id = 28
. 我想要一个过滤器来返回're_max' > 100
和language_id = 28
文档。 I did it this way: 我是这样做的:
{
"query": {
"filtered": {
"filter": {
"range": {
"re_max": {
"gt": 100
}
},
"term": {
"language_id": 28
}
}
}
}
}
But seems like it's not correct. 但似乎不正确。 how should I correct it? 我应该怎么纠正呢?
This is the error: 这是错误:
{
"error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;
shardFailures {[WkgqspjtQzmPkW-YdvE1Qg][rep][0]: SearchParseException[[rep][0]:
from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"filtered": {
"filter": {
"or": [
"range":
{
"re_max": {
"gt": 100
}
},
"term":
{
"language_id": 28
}
]
}
}
}
}
]]];
nested: QueryParsingException[[rep] Failed to parse];
nested: JsonParseException[Unexpected character (':' (code 58)):
was expecting comma to separate ARRAY entries\n at [Source: [B@3d44a542; line: 6, column: 19]]; }{[WkgqspjtQzmPkW-YdvE1Qg][rep][4]:
SearchParseException[[rep][4]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"filtered": {
"filter": {
"or": [
"range":
{
"re_max": {
"gt": 100
}
},
"term":
{
"language_id": 28
}
]
}
}
}
}
]]];
nested: QueryParsingException[[rep] Failed to parse];
nested: JsonParseException[Unexpected character (':' (code 58)):
was expecting comma to separate ARRAY entries\n at [Source: [B@3d44a542; line: 6, column: 19]]; }{[WkgqspjtQzmPkW-YdvE1Qg][rep][3]:
SearchParseException[[rep][3]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"filtered": {
"filter": {
"or": [
"range":
{
"re_max": {
"gt": 100
}
},
"term":
{
"language_id": 28
}
]
}
}
}
}
]]];
nested: QueryParsingException[[rep] Failed to parse];
nested: JsonParseException[Unexpected character (':' (code 58)):
was expecting comma to separate ARRAY entries\n at [Source: [B@3d44a542; line: 6, column: 19]]; }{[WkgqspjtQzmPkW-YdvE1Qg][rep][2]:
SearchParseException[[rep][2]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"filtered": {
"filter": {
"or": [
"range":
{
"re_max": {
"gt": 100
}
},
"term":
{
"language_id": 28
}
]
}
}
}
}
]]];
nested: QueryParsingException[[rep] Failed to parse];
nested: JsonParseException[Unexpected character (':' (code 58)):
was expecting comma to separate ARRAY entries\n at [Source: [B@3d44a542; line: 6, column: 19]]; }{[WkgqspjtQzmPkW-YdvE1Qg][rep][1]:
SearchParseException[[rep][1]: from[-1],size[-1]:
Parse Failure [Failed to parse source [
{
"query": {
"filtered": {
"filter": {
"or": [
"range":
{
"re_max": {
"gt": 100
}
},
"term":
{
"language_id": 28
}
]
}
}
}
}
]]];
nested: QueryParsingException[[rep] Failed to parse];
nested: JsonParseException[Unexpected character (':' (code 58)):
was expecting comma to separate ARRAY entries\n at [Source: [B@3d44a542; line: 6, column: 19]]; }]",
"status": 400
}
The "filtered" query was deprecated in 2.0 and removed in 5.0 “已过滤”查询在2.0中已弃用,在5.0中已删除
Elasticsearch 5 and 6 filter can be used: 可以使用Elasticsearch 5和6 过滤器 :
{
"query": {
"bool": {
"filter": [
{ "term": { "language_id": 28 }},
{ "term": { "some_other_term": "some string value"}},
{ "range": { "created_at_timestamp": { "gt": "2015-01-01" }}}
]
}
}
}
Note: The filtered query has been replaced by the bool query in recent versions of ElasticSearch. 注意:已过滤的查询已被最近版本的ElasticSearch中的bool查询替换。 See the docs for more info. 有关详细信息,请参阅文档 。
You are not the first person confused by the filtered query :) 你不是被过滤查询混淆的第一个人:)
{
"query": {
"filtered": {
"query": {
"term": {
"language_id": 28
}
},
"filter": {
"range": {
"re_max": {
"gt": 100
}
}
}
}
}
}
Update: if you want to use both conditions as a combined filter, you can join them with bool or and filter, and omit the query part altogether. 更新:如果要将两个条件用作组合过滤器,可以将它们与bool或和filter连接,并完全省略查询部分。 Example with and
follows: 用实施例and
如下:
{
"query":{
"filtered":{
"filter":{
"and":[
{
"range":{
"re_max":{
"gt":100
}
}
},
{
"term":{
"language_id":28
}
}
]
}
}
}
}
Below query is working with range filter as well as term filter. 以下查询正在使用范围过滤器和术语过滤器。
{
"size": 1,
"from": 0,
"sort": [
{
"inDeviceDateTime": {
"order": "desc"
}
}
],
"query": {
"bool": {
"must": {
"range": {
"inDeviceDateTime": {
"gte": 1500316199000,
"lte": 1500336000000
}
}
},
"must": {
"term": {
"inType": 3
}
},
"must": [
{
"multi_match": {
"query": "Mom",
"fields": [
"stFrom",
"stTo"
]
}
}
]
}
}
}
I tried Dan M's query but it did not seem to work without a 'must'. 我尝试过Dan M的查询,但是如果没有'必须',它似乎没有用。 https://discuss.elastic.co/t/after-upgrade-elasticsearch-version-getting-error-no-query-registered-for-filter-line-1-col-20-type-parsing-exception-reason-no-query-registered-for-filter-line-1-col-20-status-400/109571 https://discuss.elastic.co/t/after-upgrade-elasticsearch-version-getting-error-no-query-registered-for-filter-line-1-col-20-type-parsing-exception-reason-没有查询注册换滤波器-LINE-1-COL-20-STATUS-一十万九千五百七十一分之四百
The following worked for me: 以下对我有用:
{
"query": {
"bool": {
"must": { "term": { "clientid": 3066 }},
"filter": {
"range" : {
"date" : {
"gte" : "2018-02-14T00:00:00", "lte" : "2018-02-21T13:00:00" }}}}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.