---+ Basic Search

The basic search allows you to query using typename of an entity, associated classification/tag
and has support for filtering on the entity attribute(s) as well as the classification/tag attributes.

The entire query structure can be represented using the following JSON structure (called !SearchParameters)

<verbatim>
{
  "typeName": "hive_table",
  "excludeDeletedEntities": true,
  "classification" : "",
  "query": "",
  "limit": 25,
  "offset": 0,
  "entityFilters": {
   "attributeName": "name",
   "operator": "contains",
   "attributeValue": "testtable"
  },
  "tagFilters": null,
  "attributes": [""]
}
</verbatim>

__Field description__

   * typeName: The type of entity to look for
   * excludeDeletedEntities: Should the search include deleted entities too (default: true)
   * classification: Only include entities with given Classification/tag
   * query: Any free text occurrence that the entity should have (generic/wildcard queries might be slow)
   * limit: Max number of results to fetch
   * offset: Starting offset of the result set (useful for pagination)
   * entityFilters: Entity Attribute filter(s)
   * tagFilters: Classification/tag Attribute filter(s)
   * attributes: Attributes to include in the search result (default: include any attribute present in the filter)

   Attribute based filtering can be done on multiple attributes with AND/OR condition.

    *NOTE: The tagFilters and entityFilters field have same JSON structure.*

__Examples of filtering (for hive_table attributes)__
   * Single attribute
   <verbatim>
   {
     "typeName": "hive_table",
     "excludeDeletedEntities": true,
     "classification" : "",
     "query": "",
     "limit": 50,
     "offset": 0,
     "entityFilters": {
        "attributeName": "name",
        "operator": "contains",
        "attributeValue": "testtable"
     },
     "tagFilters": null,
     "attributes": [""]
   }
   </verbatim>
   * Multi-attribute with OR
   <verbatim>
   {
     "typeName": "hive_table",
     "excludeDeletedEntities": true,
     "classification" : "",
     "query": "",
     "limit": 50,
     "offset": 0,
     "entityFilters": {
        "condition": "OR",
        "criterion": [
           {
              "attributeName": "name",
              "operator": "contains",
              "attributeValue": "testtable"
           },
           {
              "attributeName": "owner",
              "operator": "eq",
              "attributeValue": "admin"
           }
        ]
     },
     "tagFilters": null,
     "attributes": [""]
   }
   </verbatim>
   * Multi-attribute with AND
   <verbatim>
   {
     "typeName": "hive_table",
     "excludeDeletedEntities": true,
     "classification" : "",
     "query": "",
     "limit": 50,
     "offset": 0,
     "entityFilters": {
        "condition": "AND",
        "criterion": [
           {
              "attributeName": "name",
              "operator": "contains",
              "attributeValue": "testtable"
           },
           {
              "attributeName": "owner",
              "operator": "eq",
              "attributeValue": "admin"
           }
        ]
     },
     "tagFilters": null,
     "attributes": [""]
   }
   </verbatim>

__Supported operators for filtering__

   * LT (symbols: <, lt) works with Numeric, Date attributes
   * GT (symbols: >, gt) works with Numeric, Date attributes
   * LTE (symbols: <=, lte) works with Numeric, Date attributes
   * GTE (symbols: >=, gte) works with Numeric, Date attributes
   * EQ (symbols: eq, =) works with Numeric, Date, String attributes
   * NEQ (symbols: neq, !=) works with Numeric, Date, String attributes
   * LIKE (symbols: like, LIKE) works with String attributes
   * STARTS_WITH (symbols: startsWith, STARTSWITH) works with String attributes
   * ENDS_WITH (symbols: endsWith, ENDSWITH) works with String attributes
   * CONTAINS (symbols: contains, CONTAINS) works with String attributes

__CURL Samples__

<verbatim>
    curl -sivk -g
    -u <user>:<password>
    -X POST
    -d '{
            "typeName": "hive_table",
            "excludeDeletedEntities": true,
            "classification" : "",
            "query": "",
            "limit": 50,
            "offset": 0,
            "entityFilters": {
               "condition": "AND",
               "criterion": [
                  {
                     "attributeName": "name",
                     "operator": "contains",
                     "attributeValue": "testtable"
                  },
                  {
                     "attributeName": "owner",
                     "operator": "eq",
                     "attributeValue": "admin"
                  }
               ]
            },
            "tagFilters": null,
            "attributes": [""]
          }'
    <protocol>://<atlas_host>:<atlas_port>/api/atlas/v2/search/basic
</verbatim>
