如何将下面的sql查询转换为ElasticSearch查询

时间:2016-11-15 11:44:32

标签: elasticsearch

我正在尝试从column1和column2获取数据,这两列都可以包含所请求的数据。我希望结果与column1的数据一起排序,然后是column2的数据

SQL查询:

  

从table_name中选择*,其中column1 ='first1'或column2 ='first1'   按column1,column2排序

请考虑以下数据

column1 column2

first2 first1

first1 last1

first3 last3

last3 last4

first1 last4

结果应为

column1 column2

first1 last1

first1 last4

first2 first1

我想获得类似结果的弹性查询。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以对数据使用自定义评分。我想这就是你想要的。通过使用此评分,第一个字段中包含ABC的数据的得分将高于第二列中包含该数据的数据。

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "column_name": "ABC"
              }
            },
            {
              "match": {
                "column_last_name": "ABC"
              }
            }
          ],
          "minimum_should_match": 1
        }
      },
      "script_score": {

        "script": {
          "params":{
            "word" : "ABC"
          },
          "inline" : "if(_source.column_name.equals(word)){return 2;} else if(_source.column_last_name.equals(word)){return 1;}"
        }
      },
      "boost_mode": "replace"
    }
  }
}