loopback自定义顺序

时间:2017-12-19 19:17:43

标签: angularjs elasticsearch loopbackjs strongloop loopback

我正在使用angularjs作为前端和环回用于后端和弹性搜索数据库。

我的模型的属性为:

 "name": {
  "type": "string",
  "required": true
},
"mobileNumber": {
  "type": "string",
  "required": true
},
"email": {
  "type": "string"
},
"message": {
  "type": "string",
  "required": true
},
"quantity": {
  "type": "number",
  "required": true
},
"price": {
  "type": "number",
  "required": true
},
"status": {
  "type": "string",
  "required": true,
  "default": "open"
}

},

数据为:

{
 "_index": "XXXXXX",
 "_type": "XXXXX",
 "_id": "XXXXXXX",
 "_version": 1,
 "_score": 1,
 "_source": {
  "name": "aadil kirana",
  "email": "aadil@gmail.com",
  "message": "dfgfb dgfggf",
  "quantity": 3434,
  "price": 5454,
  "status": "open",
  "createdAt": "2017-12-19T14:53:41.727Z",
  "updatedAt": "2017-12-19T14:53:41.727Z"
  }
}

状态可以打开处理关闭拒绝失败

我想要的只是按顺序获取数据,我可以看到按创建日期排序的所有打开状态数据, 然后由createdAt dat排序的所有 prcoessing 状态数据 等等....

我尝试使用环回过滤器:

filter = {
                order: ['status ASC','createdAt DESC'],
            };

但是这首先给出了按日期排序的所有关闭状态数据,然后是按日期排序的所有打开状态数据,依此类推,该状态按字母顺序排序。 / p>

请帮助我获得理想的结果。

2 个答案:

答案 0 :(得分:0)

您可以将新属性作为statusOrder添加到数据中并定义

  • 1 - >打开
  • 2 - >靠近
  • ...

并在订购状态时按statusOrder而不是状态排序。

答案 1 :(得分:0)

  

我想要的只是按照我能看到的所有顺序获取数据   打开状态数据按createdAt日期排序,然后是所有的prcoessing   由createdAt dat等排序的状态数据......

解决方法可能是让Elasticsearch使用自定义订单进行排序,例如在这种情况下,状态可以按打开排序,然后是处理,然后是关闭,然后是拒绝,然后是<强>失败即可。可以使用 Function Score Query 来完成。还可以找到更多见解here

批量插入的示例输入数据:

POST custom/sort/_bulk?pretty
{"index" : {"_index" : "custom"}}
{"status": "open", "createdAt": "2017-12-19T14:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "open", "createdAt": "2017-12-18T14:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "processing", "createdAt": "2017-12-19T14:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "processing", "createdAt": "2017-12-17T14:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "close", "createdAt": "2017-12-19T14:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "close", "createdAt": "2017-12-19T15:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "failure", "createdAt": "2017-12-19T10:53:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "failure", "createdAt": "2017-12-19T14:59:41.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "reject", "createdAt": "2017-12-19T14:53:40.727Z"}
{"index" : {"_index" : "custom"}}
{"status": "reject", "createdAt": "2017-12-19T14:53:41.727Z"}

弹性搜索的示例响应(没有自定义顺序):

查询:

GET custom / sort / _search?filter_path = took,hits.total,hits.hits._score,hits.hits._source

{
  "took": 0,
  "hits": {
    "total": 10,
    "hits": [
      {
        "_score": 1,
        "_source": {
          "status": "processing",
          "createdAt": "2017-12-19T14:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "close",
          "createdAt": "2017-12-19T14:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "reject",
          "createdAt": "2017-12-19T14:53:40.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "open",
          "createdAt": "2017-12-18T14:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "failure",
          "createdAt": "2017-12-19T10:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "failure",
          "createdAt": "2017-12-19T14:59:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "reject",
          "createdAt": "2017-12-19T14:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "open",
          "createdAt": "2017-12-19T14:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "processing",
          "createdAt": "2017-12-17T14:53:41.727Z"
        }
      },
      {
        "_score": 1,
        "_source": {
          "status": "close",
          "createdAt": "2017-12-19T15:53:41.727Z"
        }
      }
    ]
  }
}

查询以模仿自定义排序:

GET custom/sort/_search?filter_path=took,hits.hits._id,hits.hits._score,hits.hits._source,hits.hits.sort
{
  "query": {
    "function_score": {
      "boost_mode": "replace",
      "query": {
        "constant_score": {
          "filter": {
            "terms": {
              "status.keyword": [
                "open",
                "processing",
                "close",
                "reject",
                "failure"
              ]
            }
          }
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "status.keyword": "open"
            }
          },
          "weight": 4
        },
        {
          "filter": {
            "term": {
              "status.keyword": "processing"
            }
          },
          "weight": 3
        },
        {
          "filter": {
            "term": {
              "status.keyword": "close"
            }
          },
          "weight": 2
        },
        {
          "filter": {
            "term": {
              "status.keyword": "reject"
            }
          },
          "weight": 1
        },
        {
          "filter": {
            "term": {
              "status.keyword": "failure"
            }
          },
          "weight": 0
        }
      ]
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      },
      "createdAt": {
        "order": "asc"
      }
    }
  ]
}

输出(使用自定义订单):

{
  "took": 4,
  "hits": {
    "hits": [
      {
        "_id": "grOucmABwtSchlgLKlaV",
        "_score": 4,
        "_source": {
          "status": "open",
          "createdAt": "2017-12-18T14:53:41.727Z"
        },
        "sort": [
          4,
          1513608821727
        ]
      },
      {
        "_id": "gbOucmABwtSchlgLKlaV",
        "_score": 4,
        "_source": {
          "status": "open",
          "createdAt": "2017-12-19T14:53:41.727Z"
        },
        "sort": [
          4,
          1513695221727
        ]
      },
      {
        "_id": "hLOucmABwtSchlgLKlaV",
        "_score": 3,
        "_source": {
          "status": "processing",
          "createdAt": "2017-12-17T14:53:41.727Z"
        },
        "sort": [
          3,
          1513522421727
        ]
      },
      {
        "_id": "g7OucmABwtSchlgLKlaV",
        "_score": 3,
        "_source": {
          "status": "processing",
          "createdAt": "2017-12-19T14:53:41.727Z"
        },
        "sort": [
          3,
          1513695221727
        ]
      },
      {
        "_id": "hbOucmABwtSchlgLKlaV",
        "_score": 2,
        "_source": {
          "status": "close",
          "createdAt": "2017-12-19T14:53:41.727Z"
        },
        "sort": [
          2,
          1513695221727
        ]
      },
      {
        "_id": "hrOucmABwtSchlgLKlaV",
        "_score": 2,
        "_source": {
          "status": "close",
          "createdAt": "2017-12-19T15:53:41.727Z"
        },
        "sort": [
          2,
          1513698821727
        ]
      },
      {
        "_id": "ibOucmABwtSchlgLKlaV",
        "_score": 1,
        "_source": {
          "status": "reject",
          "createdAt": "2017-12-19T14:53:40.727Z"
        },
        "sort": [
          1,
          1513695220727
        ]
      },
      {
        "_id": "irOucmABwtSchlgLKlaV",
        "_score": 1,
        "_source": {
          "status": "reject",
          "createdAt": "2017-12-19T14:53:41.727Z"
        },
        "sort": [
          1,
          1513695221727
        ]
      },
      {
        "_id": "h7OucmABwtSchlgLKlaV",
        "_score": 0,
        "_source": {
          "status": "failure",
          "createdAt": "2017-12-19T10:53:41.727Z"
        },
        "sort": [
          0,
          1513680821727
        ]
      },
      {
        "_id": "iLOucmABwtSchlgLKlaV",
        "_score": 0,
        "_source": {
          "status": "failure",
          "createdAt": "2017-12-19T14:59:41.727Z"
        },
        "sort": [
          0,
          1513695581727
        ]
      }
    ]
  }
}