Ditto provides a search functionality as one of the services around its managed digital twins.

Search index

Ditto’s microservice things-search automatically consumes all events which are emitted for changes to Things and Policies and updates an for search optimized representation of the Thing data into its own database.

No custom indexes have to be defined as the structure in the database is “flattened” so that all data contained in Things can be searched for efficiently.

Search queries

Queries can be made via Ditto’s APIs (HTTP or Ditto Protocol e.g. via WebSocket).

Example: Search for all things located in “living-room”, reorder the list to start with the lowest thing ID as the first element, and return the first 5 results:

Filter:     eq(attributes/location,"living-room")
Sorting:    sort(+thingId)
Paging:     limit(0,5)

Search count queries

The same syntax applies for search count queries - only the sorting and paging makes no sense here, so there are not necessary to specify.

Namespaces

The Search supports specifying in which namespaces it should be searched. This may significantly improve the search performance when many Things of different namespaces are managed in Ditto’s search index.

RQL

In order to apply queries when searching, Ditto uses the RQL notation which is also applied for other scenarios (e.g. filtering notifications).

Paging options

size(<count>)

Limits the search results to <count> items.

If the paging option is not explicitly specified a default value of 25 is used. The maximum allowed count is 200.

cursor(<cursor-id>)

Starts the search at the position of the cursor with ID <cursor-id>. The cursor ID is obtained from the field cursor of a previous response and marks the position after the last entry of the previous search. A response includes no cursor if there are no more results.

If a request has a cursor option, then any included filter or sort option may not differ from the original request of the cursor. Otherwise, the request is rejected.

Example - return ten items with a cursor

option=size(10),cursor(<cursor-from-previous-result>)

RQL paging (deprecated)

The RQL limiting part specifies which part (or “page”) should be returned of a large search result set.

limit(<offset>,<count>)

Limits the search results to <count> items, starting with the item at index <offset>.

  • if the paging option is not explicitly specified, the default value limit(0,25) is used, i.e. the first 25 results are returned.
  • the maximum allowed count is 200.

Example - return the first ten items

limit(0,10)

Example - return the items 11 to 20

limit(10,10)

i.e. Return the next ten items (from index 11 to 20)

Tags: search rql