Files
octokit.net/docs/search.md
notauserx 46b5077b16 add islocked filter to SeachIssuesRequest (#2623)
* add islocker filter to SeachIssuesRequest

* update docs

* Update docs/search.md with review suggestions

Co-authored-by: Keegan Campbell <me@kfcampbell.com>

Co-authored-by: notauserx <notauserx@users.noreply.github.com>
Co-authored-by: Keegan Campbell <me@kfcampbell.com>
2022-11-30 15:20:19 -08:00

295 lines
8.0 KiB
Markdown

# Search
You can use Octokit to search for different sorts of data available
on the GitHub or GitHub Enterprise server:
- issues
- repositories
- code
- users
## Search Issues
A common scenario is to search for issues to triage:
```csharp
// you can also specify a search term here
var request = new SearchIssuesRequest();
// you can add individual repos to focus your search
request.Repos.Add("aspnet/home");
request.Repos.Add("dotnet", "core");
// or use a series of repositories
request.Repos = new RepositoryCollection {
"aspnet/home",
"dotnet/core"
};
```
There's many other options available here to tweak
your search criteria:
```csharp
// if you're searching for a specific term, you can
// focus your search on specific criteria
request.In = new[] {
IssueInQualifier.Title,
IssueInQualifier.Body
};
// you can restrict your search to issues or pull requests
request.Type = IssueTypeQualifier.Issue;
// you can filter on when the issue was created or updated
var aWeekAgo = DateTime.Now.Subtract(TimeSpan.FromDays(7));
request.Created = new DateRange(aWeekAgo, SearchQualifierOperator.GreaterThan)
// you can search for issues created by, assigned to
// or mentioning a specific user
request.Author = "davidfowl";
request.Assignee = "damianedwards";
request.Mentions = "shiftkey";
request.Commenter = "haacked";
// rather than setting all these, you can use this to find
// all the above for a specific user with this one-liner
request.Involves = "terrajobst";
// by default this will search on open issues, set this if
// you want to get all issues
request.State = ItemState.All;
// or to just search closed issues
request.State = ItemState.Closed;
// you can filter by the "Is" qualifier
// the enum IssueIsQualifier contains the supported values
// you can filter for locked issues like this:
request.Is = new List<IssueIsQualifier> {
IssueIsQualifier.Issue,
IssueIsQualifier.Locked
};
```
There's other options available to control how the results are returned:
```csharp
request.SortField = IssueSearchSort.Created;
request.Order = SortDirection.Descending;
// 100 results per page as default
request.PerPage = 30;
// set this when you want to fetch subsequent pages
request.Page = 2;
```
Once you've set the right parameters, execute the request:
```csharp
var repos = await client.Search.SearchIssues(request);
Console.WriteLine("Query has {0} matches.", repos.TotalCount);
Console.WriteLine("Response has {0} items.", repos.Items.Count);
```
## Search Pull Requests
Another scenario to consider is how to search broadly:
```csharp
var threeMonthsAgoIsh = DateTime.Now.Subtract(TimeSpan.FromDays(90));
// search for a specific term
var request = new SearchIssuesRequest("linux")
{
// only search pull requests
Type = IssueTypeQualifier.PR,
// search across open and closed PRs
State = ItemState.All,
// search repositories which contain code
// matching a given language
Language = Language.CSharp,
// focus on pull requests updated recently
Updated = new DateRange(threeMonthsAgoIsh, SearchQualifierOperator.GreaterThan)
};
```
## Search Repositories
To search for repositories using Octokit you need to create a `SearchRepositoriesRequest` and populate it with the search criteria.
```csharp
// Initialize a new instance of the SearchRepositoriesRequest class
var request = new SearchRepositoriesRequest();
// you can also specify a search term here
var request = new SearchRepositoriesRequest("bootstrap");
var result = await githubClient.Search.SearchRepo(request);
```
Now we can further filter our search.
```csharp
var request = new SearchRepositoriesRequest("mvc client side framework")
{
// lets find a library with over 1k stars
Stars = Range.GreaterThan(1000),
// we can specify how big we want the repo to be in kilobytes
Size = Range.GreaterThan(1),
// maybe we want the library to have over 50 forks?
Forks = Range.GreaterThan(50),
// we may want to include or exclude the forks too
Fork = ForkQualifier.IncludeForks,
// how about we restrict the language the library is written in?
Language = Language.JavaScript,
// maybe we want to include searching in the read me?
In = new[] { InQualifier.Readme },
// or go all out and search the readme, name or description?
In = new[] { InQualifier.Readme, InQualifier.Description, InQualifier.Name },
// how about searching for libraries created after a given date?
Created = DateRange.GreaterThan(new DateTime(2015, 1, 1)),
// or maybe check for repos that have been updated between a given date range?
Updated = DateRange.Between(new DateTime(2012, 4, 30), new DateTime(2012, 7, 4)),
// we can also restrict the owner of the repo if we so wish
User = "dhh"
};
```
We can also sort our results, the default sort direction is descending
```csharp
var request = new SearchRepositoriesRequest("mvc client side framework")
{
// sort by the number of stars
SortField = RepoSearchSort.Stars,
// or by forks?
SortField = RepoSearchSort.Forks,
// how about changing that sort direction?
Order = SortDirection.Ascending
}
```
## Search Code
To search for code using Octokit you need to create a `SearchCodeRequest` and populate it with the search criteria.
```csharp
// Initialize a new instance of the SearchCodeRequest class with a search term
var request = new SearchCodeRequest("auth");
// Or we can restrict the search to a specific repo
var request = new SearchCodeRequest("auth", "dhh", "rails");
var result = await githubClient.Search.SearchCode(request);
```
Now we can further filter our search.
```csharp
var request = new SearchCodeRequest("auth")
{
// we can restrict search to the file, path or search both
In = new[] { CodeInQualifier.File, CodeInQualifier.Path },
// how about we find a file based on a certain language
Language = Language.JavaScript,
// do we want to search forks too?
Forks = true,
// find files that are above 1000 bytes
Size = Range.GreaterThan(1000),
// we may want to restrict the search to the path of a file
Path = "app/assets",
// we may want to restrict the file based on file extension
Extensions = new[] { "json", "sql" },
// restrict search to a specific file name
FileName = "app.json",
// search within a users or orgs repo
Users = new[] { "johnDoe", "janeDoe" }
Organizations = new[] { "johnDoe", "janeDoe" }
};
```
We can also sort our results by indexed or leave as null for best match.
```csharp
var request = new SearchCodeRequest("dhh")
{
// sort by last indexed
SortField = CodeSearchSort.Indexed
}
```
## Search Users
To search for users using Octokit you need to create a `SearchUsersRequest` and populate it with the search criteria.
```csharp
// Initialize a new instance of the SearchUsersRequest class with a search term
var request = new SearchUsersRequest("dhh");
var result = await githubClient.Search.SearchUsers(request);
```
Now we can further filter our search.
```csharp
var request = new SearchUsersRequest("dhh")
{
// lets find user with over 1k followers
Followers = Range.GreaterThan(1000),
// find a user created after the date
Created = DateRange.GreaterThan(new DateTime(2015, 1, 1)),
// we can search the location of a user, found a martian anyone?
Location = "Mars",
// find a user that has over 100 repos
Repositories = Range.GreaterThan(100),
// how about we find users that have a repo that match a certain language
Language = Language.JavaScript,
// we may want to restrict to orgs or users only
AccountType = AccountSearchType.Org,
// maybe we want to peek the username only?
In = new[] { UserInQualifier.Username },
// or go all out and search username, email and fullname?
In = new[] { UserInQualifier.Username, UserInQualifier.Email, UserInQualifier.Fullname },
};
```
We can also sort our results, by Followers, Repositories, Joined or leave as null for best match.
```csharp
var request = new SearchUsersRequest("dhh")
{
// sort by the number of followers
SortField = UsersSearchSort.Followers
}
```