5

这似乎是一个冷漠的问题,我无法在包括这里在内的任何地方找到答案,所以我将再次尝试看看是否有人有解决方案。我有一个 SharePoint 2013 实例,我使用 REST API 进行内容搜索并返回到我的 React 前端进行显示。这很好用。但是,当我只需要在整个站点中搜索特定文档的列表而不仅仅是在目录或特定列表中时,我现在遇到了问题。我可以使用 /_api/search/query?queryText="" 进行内容搜索就好了,但我想构造这个 API 端点的查询文本,只在我提供的列表中搜索文档。

例如,如果我要查找三个文档:

  1. Foo.txt
  2. 酒吧.doc
  3. Foobar.pdf

我只想要这些文档和相应的数据(例如我使用搜索 api 获得的 RedirectEmbedURL 等)而不是 /_api/web/lists/getByTitle 方法。

有没有办法格式化查询字符串以仅返回特定文件?

谢谢。

4

2 回答 2

6

要检索列表,您需要知道站点路径和库名称。

您还需要操作员使用过滤器

运营商

检索列表中的所有文件: https:////_api/Web/Lists/GetByTitle('')/Items?$expand=File

例子:

https://domain-example.com/sites/site1/site2/etc/_api/Web/Lists/GetByTitle('listtitle')/Items?$expand=File

以下是过滤器的一些示例

要按名称过滤,您需要展开“FieldValuesAsText”并按属性“FileLeafRef”过滤 这里的示例:

https://[site]/web/Lists/GetByTitle('[library_name]')/Items?$filter=substringof('[TEXT_TO_SEARCH]',Title) or substringof('[TEXT_TO_SEARCH]',FileLeafRef)&$expand=File,FieldValuesAsText

我也按标题过滤,因为我不知道用户是否需要标题或带有扩展名的名称。

过滤器 StartsWith

https://domain-example.com/sites/site1/site2/etc/_api/Web/Lists/GetByTitle('listtitle')/Items?$expand=File&$filter=startswith(Title,'Foo')

过滤“包含”(substringof)

https://domain-example.com/sites/site1/site2/etc/_api/Web/Lists/GetByTitle('listtitle')/Items?$expand=File&$filter=substringof('T15', Title)

过滤“使用相关键搜索(在本例中为 ex1)”:(substringof)

https://domain-example.com/sites/site1/site2/etc/_api/Web/lists/GetByTitle('listtitle')/Items?$expand=FieldValuesAsText&$filter=substringof('BES10GHC10BB001', ex1)

谢谢阅读!

于 2019-01-10T15:58:31.837 回答
2

我只是使用:

https://<domain>/sites/<list-title>/_api/files

它包括 Url、Name 和“childrenCount”来过滤文件夹。

您可以在请求中使用逻辑进行过滤。

于 2020-06-16T13:53:13.333 回答