You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Graph API通过自定义Yes/No列搜索SharePoint文件?

问题解决:用Java Graph API SDK通过SharePoint自定义Yes/No列搜索文件

可以实现,但你当前代码的问题出在两个关键点:

  • 自定义列在Graph搜索查询中需要用托管属性名,而非你写的STTagged(这可能是列的内部名或显示名)
  • SharePoint的Yes/No类型列在搜索查询里的取值是1(代表Yes)或0(代表No),不是true/false

步骤1:确认自定义列的托管属性名

自定义列在SharePoint搜索架构中会对应一个托管属性,你需要先找到它的正确名称:

  • 方法1:在SharePoint站点的列表设置中找到Tagged列,查看其内部名称(比如内部名是STTagged),对应的托管属性通常是ows_{内部名},即ows_STTagged
  • 方法2:调用Graph API获取列信息:
    // 示例:获取指定列表的所有列
    ListColumnsCollectionPage columns = graphClient.sites(siteid).lists("your-list-id").columns()
        .buildRequest()
        .get();
    
    在返回结果中找到Tagged列的name字段(内部名),再对应到托管属性。

步骤2:修正查询字符串和代码

把查询字符串中的STTagged=false替换为正确的托管属性名+取值0(代表未标记),示例如下:

SiteRequestBuilder sitereq = graphClient.sites(siteid);
String webUrl = sitereq.buildRequest().get().webUrl;
// 修正后的带Tagged条件的查询字符串
String queryStringTagged = String.format("ows_STTagged=0 AND isDocument=true AND processed=false AND path: \"%s\" ", webUrl);

LinkedList<SearchRequest> requestsList = new LinkedList<>();
SearchRequest requests = new SearchRequest();

LinkedList<EntityType> entityTypesList = new LinkedList<>();
entityTypesList.add(EntityType.DRIVE_ITEM);
requests.entityTypes = entityTypesList;

LinkedList<SortProperty> sortProperties = new LinkedList<>();
SortProperty sort = new SortProperty();
sort.name = "LastModifiedTime";
sort.isDescending = false;
sortProperties.add(sort);

SearchQuery query = new SearchQuery();
// 使用修正后的查询字符串
query.queryString = queryStringTagged;
requests.query = query;
requests.sortProperties = sortProperties;
requests.size = 500;

requestsList.add(requests);

SearchEntityQueryParameterSet sqp = SearchEntityQueryParameterSet
                .newBuilder()
                .withRequests(requestsList)
                .build();

SearchEntityQueryCollectionRequest searchRequest = graphClient.search().query(sqp).buildRequest();
SearchEntityQueryCollectionPage searchResult = searchRequest.post();

额外注意事项

  • 确保SharePoint搜索已经完成对该自定义列的爬取,如果是刚创建的列,可能需要等待爬取周期完成,或者手动触发爬取
  • 如果processed也是自定义列,同样需要用对应的托管属性名和正确取值格式

内容的提问来源于stack exchange,提问作者rread

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:17:15