2014-10-03 89 views
2

我想有一个过滤器来返回文档're_max' > 100language_id = 28。我这样做:范围和术语过滤器的弹性搜索组合

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "range": { 
      "re_max": { 
      "gt": 100 
      } 
     }, 
     "term": { 
      "language_id": 28 
     } 
     } 
    } 
    } 
} 

但似乎它不正确。我应该如何改正它?
这是错误:

{ 
    "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: [[email protected]; 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: [[email protected]; 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: [[email protected]; 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: [[email protected]; 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: [[email protected]; line: 6, column: 19]]; }]", 
    "status": 400 
} 

回答

3

你是不是被过滤查询:)

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "term": { 
      "language_id": 28 
     } 
     }, 
     "filter": { 
     "range": { 
      "re_max": { 
      "gt": 100 
      } 
     } 
     } 
    } 
    } 
} 

更新混淆的第一人:如果你想使用这两个条件组合过滤器,你可以用bool或者filter来加入它们,并且完全省略查询部分。与and例子如下:

{ 
    "query":{ 
     "filtered":{ 
      "filter":{ 
       "and":[ 
        { 
         "range":{ 
          "re_max":{ 
           "gt":100 
          } 
         } 
        }, 
        { 
         "term":{ 
          "language_id":28 
         } 
        } 
       ] 
      } 
     } 
    } 
} 
+0

什么所述第二查询装置?我只想使用过滤器而不是查询。它是否过滤而不考虑分数? – 2014-10-03 22:18:03

+0

是的,过滤的部分没有分数,这是过滤后的查询的想法。 – Ashalynd 2014-10-03 22:43:20

0

下面查询正在与范围滤波器以及术语过滤器。

{ 
"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" 
     ] 
     } 
    } 
    ] 
    } 
} 
} 
3

的 “过滤” 查询已被废弃在2.0和removed在5.0

Elasticsearch 5和6 filter可以使用:

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { "term": { "language_id": 28 }}, 
     { "term": { "some_other_term": "some string value"}}, 
     { "range": { "created_at_timestamp": { "gt": "2015-01-01" }}} 
     ] 
    } 
    } 
} 
相关问题