SearchNode


@ExperimentalAppSearchApi
public final class SearchNode implements FunctionNode


FunctionNode that represents the search function.

The search function is a convenience function that takes a query string and parses it according to the supported query language, and can optionally take a list of property paths to serve as property restricts. This means that the query `search("foo bar", createList("subject", body")` is equivalent to the query `(subject:foo OR body:foo) (subject:bar OR body:bar)`.

Summary

Public constructors

SearchNode(@NonNull Node childNode)

Create a SearchNode representing the query function `search(queryString)`.

SearchNode(
    @NonNull Node childNode,
    @NonNull List<PropertyPath> propertyPaths
)

Create a SearchNode representing the query function `search(queryString, createList(listOfProperties)`.

Public methods

void

Add a restrict to the end of the current list of restricts mPropertyPaths.

boolean
@NonNull Node

Returns the child query searched for in the function.

@NonNull List<Node>

Returns the child Node of SearchNode as a list containing the only child Node.

@NonNull String

Returns the name of the function represented by SearchNode.

@NonNull List<PropertyPath>

Returns the list of property restricts applied to the query.

int
void
setChild(@NonNull Node childNode)

Sets the query searched for in the function.

void

Sets what property restricts will be applied to the query.

@NonNull String

Get the query string representation of SearchNode.

Inherited Constants

From androidx.appsearch.ast.FunctionNode
static final String
FUNCTION_NAME_GET_SEARCH_STRING_PARAMETER = "getSearchStringParameter"

Name of the query function represented by androidx.appsearch.ast.query.GetSearchStringParameterNode.

static final String

Name of the query function represented by androidx.appsearch.ast.query.HasPropertyNode.

static final String
FUNCTION_NAME_PROPERTY_DEFINED = "propertyDefined"

Name of the query function represented by androidx.appsearch.ast.query.PropertyDefinedNode.

static final String

Name of the query function represented by androidx.appsearch.ast.query.SearchNode.

static final String

Name of the query function represented by androidx.appsearch.ast.query.SemanticSearchNode.

Public constructors

SearchNode

Added in 1.1.0-beta01
public SearchNode(@NonNull Node childNode)

Create a SearchNode representing the query function `search(queryString)`.

By default, the query function search will have an empty list of restricts. The search function will return all results from the query.

Parameters
@NonNull Node childNode

The query to search for represented as a Node.

SearchNode

Added in 1.1.0-beta01
public SearchNode(
    @NonNull Node childNode,
    @NonNull List<PropertyPath> propertyPaths
)

Create a SearchNode representing the query function `search(queryString, createList(listOfProperties)`.

Parameters
@NonNull Node childNode

The query to search for represented as a Node.

@NonNull List<PropertyPath> propertyPaths

A list of property paths to restrict results from the query. If the list is empty, all results from the query will be returned.

Public methods

addPropertyPath

Added in 1.1.0-beta01
public void addPropertyPath(@NonNull PropertyPath propertyPath)

Add a restrict to the end of the current list of restricts mPropertyPaths.

equals

public boolean equals(Object o)

getChild

Added in 1.1.0-beta01
public @NonNull Node getChild()

Returns the child query searched for in the function.

getChildren

public @NonNull List<NodegetChildren()

Returns the child Node of SearchNode as a list containing the only child Node.

getFunctionName

Added in 1.1.0-beta01
public @NonNull String getFunctionName()

Returns the name of the function represented by SearchNode.

getPropertyPaths

Added in 1.1.0-beta01
public @NonNull List<PropertyPathgetPropertyPaths()

Returns the list of property restricts applied to the query. If the list is empty, there are no property restricts, which means that `search` will return all results from the query.

hashCode

public int hashCode()

setChild

Added in 1.1.0-beta01
public void setChild(@NonNull Node childNode)

Sets the query searched for in the function.

setPropertyPaths

Added in 1.1.0-beta01
public void setPropertyPaths(@NonNull List<PropertyPath> properties)

Sets what property restricts will be applied to the query.

toString

public @NonNull String toString()

Get the query string representation of SearchNode.

If there are no property restricts, then the string representation is the function name followed by the string representation of the child subquery as a string literal, surrounded by parentheses. For example the node represented by

TextNode node = new TextNode("foo");
SearchNode searchNode = new SearchNode(node);
will be represented by the query string `search("(foo)")`.

If there are property restricts, i.e. getPropertyPaths is not empty, then in addition to the string representation of the child subquery, the property restricts will be represented as inputs to the createList function, which itself will be an input. So for the node represented by

List<PropertyPath> propertyPaths = List.of(new PropertyPath("example.path"),
                                           new PropertyPath("anotherPath"));
TextNode node = new TextNode("foo");
SearchNode searchNode = new SearchNode(node, propertyPaths);
the query string will be `search("(foo)", createList("example.path", "anotherPath"))`.

Operators in the query string are supported. As such additional escaping are applied to ensure that operators stay scoped to the search node. This applies recursively, so if we had three layers of search i.e. a search function that takes a query containing a nested search, we would apply three levels of escaping. So for the node represented by

TextNode node = new TextNode("foo");
node.setVerbatim(true);
SearchNode nestedSearchNode = new SearchNode(node);
SearchNode searchNode = new SearchNode(nestedSearchNode);
the query string of searchNode will be `search("search(\"(\\\"foo\\\")\")")`