Home > Blockchain >  Has there been any change in the format of using function_score in ES 6.8?
Has there been any change in the format of using function_score in ES 6.8?

Time:08-01

I have the query in below format and it runs in ES 2.4

{"query":{"function_score":{"filter":{"bool":{"must":[{"exists":{"field":"x"}},{"query_string":{"query":"en","fields":["locale"]}},{"query_string":{"query":"US","fields":["channel"]}},{"query_string":{"query":"UG","fields":["usergroups"]}}]}},"query":{"bool":{"should":{"multi_match":{"query":"refund","fields":["doc","key","title","title.standard_analyzed^3","x"],"type":"phrase","slop":20}},"must":{"multi_match":{"fuzziness":"0","query":"refund","prefix_length":"6","fields":["doc","key","title","title.standard_analyzed^3","x"],"max_expansions":"30"}}}},"functions":[{"field_value_factor":{"field":"usage","factor":1,"modifier":"log2p","missing":1}}]}},"from":0,"size":21}

But when I try the same query in 6.8 it returns errors {"error":{"root_cause":[{"type":"parsing_exception","reason":"no [query] registered for [function_score]",

If I put filters inside query, I get the response but the order of the docs don't match due to the difference in score

CodePudding user response:

There should only be the "query" key below the function score. You have to add the filter in the bool query. I don't know about your mapping but I would use the "Term" query instead of the query string.

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "filter": { 
            "bool": {
              "must": [
                {
                  "exists": {
                    "field": "x"
                  }
                },
                {
                  "query_string": {
                    "query": "en",
                    "fields": [
                      "locale"
                    ]
                  }
                },
                {
                  "query_string": {
                    "query": "US",
                    "fields": [
                      "channel"
                    ]
                  }
                },
                {
                  "query_string": {
                    "query": "UG",
                    "fields": [
                      "usergroups"
                    ]
                  }
                }
              ]
            }
          },
          "should": {
            "multi_match": {
              "query": "refund",
              "fields": [
                "doc",
                "key",
                "title",
                "title.standard_analyzed^3",
                "x"
              ],
              "type": "phrase",
              "slop": 20
            }
          },
          "must": {
            "multi_match": {
              "fuzziness": "0",
              "query": "refund",
              "prefix_length": "6",
              "fields": [
                "doc",
                "key",
                "title",
                "title.standard_analyzed^3",
                "x"
              ],
              "max_expansions": "30"
            }
          }
        }
      },
      "functions": [
        {
          "field_value_factor": {
            "field": "usage",
            "factor": 1,
            "modifier": "log2p",
            "missing": 1
          }
        }
      ]
    }
  },
  "from": 0,
  "size": 21
}

About FunctionScore (doc 6.8)

  • Related