仅使用 Elasticsearch 和 Return 源字段进行查询

Query with Elasticsearch and Return source field only

我在 Elasticsearch 上有一些数据并使用 Fastapi GET 调用检索数据。

我使用下面的代码从 Elasticsearch 获取数据

main.py

@app.get("/get_all")
def getData():
    es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
    es.indices.refresh(index="fraction")
    res = es.search(index="fraction", body={"query": {"match_all": {}}})
    return res

它return这样的数据

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 11,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "fraction",
        "_type": "_doc",
        "_id": "qx-PtoAB8NYsWRUHEO5X",
        "_score": 1,
        "_source": {
          "company_name": "Fraction",
          "floor": "Ground Floor",
          "group ": "Group 1",
          "camera": "Camera_1",
          "videos": "video1"
        }
      }....

像这种格式返回的数据,但我希望 return _source 字段(company_name,组 ....)。

如何使用 Fastapi GET 调用执行此操作。

您需要将 Elasticsearch 的响应转换为您想要的对象:

这是一种方法:

@app.get("/get_all")
def getData():
    es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
    es.indices.refresh(index="fraction")
    res = es.search(index="fraction", body={"query": {"match_all": {}}})
    hits = res.get("hits", {}).get("hits", [])
    return {
        "results": [hit.get("_source") for hit in hits]
    }