Skip to content

Full text queries

Full text queries allow you to find results based on analyzed text fields.1 For example, by a word or phrase within a longer description.

Unlike term-level queries, the search terms you use in a full-text query are analyzed. This means what you search for is tokenized first (broken up into separate words), singular / plural variants determined, synonyms applied, and so on.

Details

Below are the various kinds of full text queries. These are sorted with the most commonly used at the top, and cover their usual usage. Each one is linked to Elasticsearch's own documentation to provide greater details. (In most cases there are many more options for each kind of query than what is documented here.)

Match

1.0.0 1.1.0

Match queries return results where the asset's value for that attribute matches some part of what you're searching.

Build the query and request
1
2
3
IndexSearchRequest index = Atlan.getDefaultClient().assets.select() // (1)
    .where(Asset.NAME.match("tmp")) // (1)
    .toRequest();
  1. You can search across all assets using the select() method of the assets member on any client.
  2. Chain a where() onto the select, with the static constant representing a field of the type you want to search to start a query, in this case the NAME of an Asset. Adding the match() predicate creates a match query.

    Equivalent query through Elastic
    Query byMatch =  MatchQuery.of(m -> m
        .field("name")
        .query("tmp")
      ._toQuery();
    
Build the query
1
2
3
4
5
6
from pyatlan.model.assets import Asset
from pyatlan.model.fluent_search import FluentSearch

index = (FluentSearch()  # (1)
         .where(Asset.NAME.match("tmp"))  # (2)
        ).to_request()
  1. You can search across all assets using a FluentSearch() object.
  2. Use the class variable representing a field of the type you want to search to start a query, in this case the NAME of an Asset. Adding the match() predicate creates a match query.
Build the query and request
1
2
3
val index = Atlan.getDefaultClient().assets.select() // (1)
    .where(Asset.NAME.match("tmp")) // (1)
    .toRequest()
  1. You can search across all assets using the select() method of the assets member on any client.
  2. Chain a where() onto the select, with the static constant representing a field of the type you want to search to start a query, in this case the NAME of an Asset. Adding the match() predicate creates a match query.

    Equivalent query through Elastic
    val byMatch =  MatchQuery.of(m -> m
        .field("name")
        .query("tmp")
      ._toQuery()
    
POST /api/meta/search/indexsearch
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "dsl": { // (1)
    "query": { // (2)
      "match": { // (3)
        "name": { // (4)
          "query": "tmp" // (5)
        }
      }
    }
  }
}
  1. Queries must be within the dsl object in the API...
  2. ...and within that the query object.
  3. For a match query, there needs to be a match object embedded within the query object.
  4. Within this object should be a key with the name of the Elasticsearch field (Atlan attribute) to match against.
  5. The value for this field (attribute) to match against should be given through the query property.

  1. This page is a summary of the details in the Elasticsearch Guide's Full text queries