@esri/arcgis-rest-portal
Version:
ArcGIS Online and Enterprise content and user helpers for @esri/arcgis-rest-request
207 lines (206 loc) • 5.53 kB
TypeScript
import { IParamBuilder } from "@esri/arcgis-rest-request";
/**
* `SearchQueryBuilder` can be used to construct the `q` param for {@linkcode searchItems} or {@linkcode searchGroups}.
*
* By chaining methods, it helps build complex search queries.
*
* ```js
* const startDate = new Date("2020-01-01");
* const endDate = new Date("2020-09-01");
* const query = new SearchQueryBuilder()
* .match("Patrick")
* .in("owner")
* .and()
* .from(startDate)
* .to(endDate)
* .in("created")
* .and()
* .startGroup()
* .match("Web Mapping Application")
* .in("type")
* .or()
* .match("Mobile Application")
* .in("type")
* .or()
* .match("Application")
* .in("type")
* .endGroup()
* .and()
* .match("Demo App");
*
* searchItems(query).then((res) => {
* console.log(res.results);
* });
* ```
*
* Will search for items matching
* ```
* "owner: Patrick AND created:[1577836800000 TO 1598918400000] AND (type:"Web Mapping Application" OR type:"Mobile Application" OR type:Application) AND Demo App"
* ```
*/
export declare class SearchQueryBuilder implements IParamBuilder {
private termStack;
private rangeStack;
private q;
private openGroups;
private currentModifer;
/**
* @param q An existing query string to start building from.
*/
constructor(q?: string);
/**
* Defines strings to search for.
*
* ```js
* const query = new SearchQueryBuilder()
* .match("My Layer")
* ```
*
* @param terms strings to search for.
*/
match(this: SearchQueryBuilder, ...terms: string[]): SearchQueryBuilder;
/**
* Defines fields to search in. You can pass `"*"` or call this method without arguments to search a default set of fields
*
* ```js
* const query = new SearchQueryBuilder()
* .match("My Layer")
* .in("title")
* ```
*
* @param field The field to search for the previous match in.
*/
in(this: SearchQueryBuilder, field?: string): SearchQueryBuilder;
/**
* Starts a new search group.
*
* ```js
* const query = new SearchQueryBuilder()
* .startGroup()
* .match("Lakes")
* .in("title")
* .endGroup()
* .or()
* .startGroup()
* .match("Rivers")
* .in("title")
* .endGroup()
* ```
*/
startGroup(this: SearchQueryBuilder): SearchQueryBuilder;
/**
* Ends a search group.
*
* ```js
* const query = new SearchQueryBuilder()
* .startGroup()
* .match("Lakes")
* .in("title")
* .endGroup()
* .or()
* .startGroup()
* .match("Rivers")
* .in("title")
* .endGroup()
* ```
*/
endGroup(this: SearchQueryBuilder): SearchQueryBuilder;
/**
* Joins two sets of queries with an `AND` clause.
*
* ```js
* const query = new SearchQueryBuilder()
* .match("Lakes")
* .in("title")
* .and()
* .match("Rivers")
* .in("title")
* ```
*/
and(this: SearchQueryBuilder): SearchQueryBuilder;
/**
* Joins two sets of queries with an `OR` clause.
*
* ```js
* const query = new SearchQueryBuilder()
* .match("Lakes")
* .in("title")
* .or()
* .match("Rivers")
* .in("title")
* ```
*/
or(this: SearchQueryBuilder): SearchQueryBuilder;
/**
* Joins two sets of queries with a `NOT` clause. Another option for filtering results is the [prohibit operator '-'](https://developers.arcgis.com/rest/users-groups-and-items/search-reference.htm#ESRI_SECTION1_5C6C35DB9E4A4F4492C5B937BDA2BF67).
*
* ```js
* // omit results with "Rivers" in their title
* const query = new SearchQueryBuilder()
* .not()
* .match("Rivers")
* .in("title")
*
* // equivalent
* const query = new SearchQueryBuilder()
* .match("Rivers")
* .in("-title")
* ```
*/
not(this: SearchQueryBuilder): SearchQueryBuilder;
/**
* Begins a new range query.
*
* ```js
*
* const NEWYEARS = new Date("2020-01-01")
* const TODAY = new Date()
*
* const query = new SearchQueryBuilder()
* .from(NEWYEARS)
* .to(TODAY)
* .in("created")
* ```
*/
from(this: SearchQueryBuilder, term: number | string | Date): SearchQueryBuilder;
/**
* Ends a range query.
*
* ```js
* const query = new SearchQueryBuilder()
* .from(yesterdaysDate)
* .to(todaysDate)
* .in("created")
* ```
*/
to(this: SearchQueryBuilder, term: any): SearchQueryBuilder;
/**
* Boosts the previous term to increase its rank in the results.
*
* ```js
* const query = new SearchQueryBuilder()
* .match("Lakes")
* .in("title")
* .or()
* .match("Rivers")
* .in("title")
* .boost(3)
* ```
*/
boost(this: SearchQueryBuilder, num: number): SearchQueryBuilder;
/**
* Returns the current query string. Called internally when the request is made.
*/
toParam(): string;
/**
* Returns a new instance of `SearchQueryBuilder` based on the current instance.
*/
clone(): SearchQueryBuilder;
private addModifier;
private hasWhiteSpace;
private formatTerm;
private commit;
private get hasTerms();
private get hasRange();
private cleanup;
}