Elastic - Multiple filter query syntax

时间:2017-10-10 18:38:56

标签: elasticsearch

Hello I have the following query that I am running:

{
  "_source": [
    "source1",
    "source2",
    "source3",
    "source4",
  ],
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "must": {
        "filter": [
            {
            "term": {
              "_type": {
                "value": "someval1"
              }
            }
          },
          {
            "term": {
              "_type": {
                "value": "someval2"
              }
            }
          }
        ],
        "query_string": {
          "analyze_wildcard": "true",
          "query": "tesla*",
          "rewrite": "scoring_boolean"
        }
      }
    }
  },
  "size": 50,
  "sort": [
    "_score"
  ]
}

That is currently returning:

'"reason":"[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":343},"status":400}'

Any idea how to use multiple filters on a query? I was able to do it just fine on elastic 2.4 but since OR is now deprecated as well as filtered, I am a bit lost.

Thanks!

1 个答案:

答案 0 :(得分:1)

查询的语法错误。不应将 function encodeOrderHtml(order) { debugger; var o = order; //scrub HTML from product options if (o && o.serviceDiscount) { var sd = o.serviceDiscount; if (sd.description !== "" && sd.description !== null) { sd.description = encodeURIComponent(sd.description); } if (sd.descriptionNew !== "" && sd.descriptionNew !== null) { sd.descriptionNew = encodeURIComponent(sd.descriptionNew); } if (sd.displayNameNew !== "" && sd.displayNameNew !== null) { sd.displayNameNew = encodeURIComponent(sd.displayNameNew); } if (sd.name !== "" && sd.name !== null) { sd.name = encodeURIComponent(sd.name); } } return o; } 包含在filter语句中。它应与must处于同一级别。同样must查询bool语句应该是一个数组,而不是一个对象。所以你的查询应该是这样的

must

我认为您的过滤器为{ "_source":[ "source1", "source2", "source3", "source4" ], "query":{ "bool":{ "minimum_should_match":1, "must":[ { "query_string":{ "analyze_wildcard":"true", "query":"tesla*", "rewrite":"scoring_boolean" } } ], "filter":{ "bool":{ "should":[ { "term":{ "_type":{ "value":"someval1" } } }, { "term":{ "_type":{ "value":"someval2" } } } ] } } } }, "size":50, "sort":[ "_score" ] } ,这就是我将其封装在OR内的原因