【问题标题】:How to organize unified search by multiply types (C#/HotChocolate)如何组织多种类型的统一搜索(C#/Hot Chocolate)
【发布时间】:2022-07-28 17:55:40
【问题描述】:

我想在我的应用程序中实现一个统一的搜索——一个单一的端点,它通过一些搜索令牌返回不同类型的结果。我目前的认识很简单。

热巧克力查询:

    [ExtendObjectType("Query")]
    public class SearchQueries
    {
        [UseDbContext(typeof(ApplicationDbContext))]
        public async Task<SearchResult> GetSearch(
            [Argument("token")] string token,
            [ScopedService] ApplicationDbContext dbContext,
            CancellationToken cancellationToken)
        {
            var users = await dbContext.Users
                .Where(s => s.Name.Contains(token))
                .ToArrayAsync(cancellationToken);
            
            var services = await dbContext.Services
                .Where(s => s.Name.Contains(token))
                .ToArrayAsync(cancellationToken);
            
            return new SearchResult
            {
                Users = users,
                Services = services
            };
        }
    }

GrahpQL 查询:

query Search($token: String!){
  search(token: $token) {
    services {
      name
    },
    users {
      name,
      about
    }
  }
}

GrahpQL 响应

{
  "data": {
    "search": {
      "services": [
        {
          "name": "Test service 1"
        },
        {
          "name": "Test service 2"
        },
        {
          "name": "Test service 3"
        }
      ],
      "researchers": [
        {
          "name": "User 1",
          "about": "About user 1"
        },
        {
          "name": "User 2",
          "about": "About user 2"
        }
      ]
    }
  }
}

但我想做得更健壮:没有中间类型 SearchResult,使用全局对象标识。还有其他方法吗?

我应该那样做吗?:

query Search($token: String!){
    services(token: $token) {
      nodes {
        name
      }
    },
    researchers(token: $token) {
      nodes {
        name,
        about
      }
    }
}

【问题讨论】:

    标签: c# .net graphql hotchocolate


    【解决方案1】:

    据我了解您的问题,这很容易实现。在每个实体类型的查询类型中,使用“token”参数定义方法,该参数将返回过滤后的集合。有了这个,按照你已经提出的方式进行查询:

    query Search($token: String!){
    services(token: $token) {
      nodes {
        name
      }
    },
    researchers(token: $token) {
      nodes {
        name,
        about
      }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多