Logo

Guillotina 6.4.1 documentation

index routing table modules next previous

Table of Contents

  • Search
    • Search
      • Use cases
      • Implementation details
      • Examples
    • Aggregation

Previous topic

Folder

Next topic

Getting started

This Page

  • Show Source

Quick search

Search

Search¶

Search¶

Note

Requires guillotina.contrib.catalog.pg application activated with PostgreSQL.

The @search endpoint accepts GET requests. It is available for container and resources. The default search parser and query syntax is flat and does not support nested queries.

GET /(db)/(container)/@search¶

Make search request

  • Permission: guillotina.SearchContent
  • Context: guillotina.interfaces.content.IResource

http

GET /db/container/@search HTTP/1.1
Accept: application/json
Authorization: Basic cm9vdDpyb290

curl

curl -i http://nohost/db/container/@search -H 'Accept: application/json' --user root:root

httpie

http http://nohost/db/container/@search Accept:application/json -a root:root

response

HTTP/1.1 503 OK
Content-Type: application/json

{}
Query Parameters:
 
  • term (string) – Generic search term support. See modifier list below for usage.
  • _from (string) – Start with search result _from.
  • _size (string) – Size of result set. Max to 50 (app_settings.catalog_max_results).
  • _sort_asc (string) – Sort ascending by index _sort_asc.
  • _sort_des (string) – Sort descending by index _sort_des.
  • _metadata (string) – List of metadata fields to include
  • _metadata_not (string) – List of metadata fields to exclude
  • __eq (string) –
  • __not (string) –
  • __gt (string) –
  • __gte (string) –
  • __lte (string) –
  • __lt (string) –
  • __in (string) –
Status Codes:
  • 200 OK – Search results
  • 401 Unauthorized – You are not authorized to perform the operation
  • 404 Not Found – The resource does not exist

GET /(db)/(container)/(id)/@search¶

Make search request

  • Permission: guillotina.SearchContent
  • Context: guillotina.interfaces.content.IResource

http

GET /db/container/foobar/@search HTTP/1.1
Accept: application/json
Authorization: Basic cm9vdDpyb290

curl

curl -i http://nohost/db/container/foobar/@search -H 'Accept: application/json' --user root:root

httpie

http http://nohost/db/container/foobar/@search Accept:application/json -a root:root

response

HTTP/1.1 503 OK
Content-Type: application/json

{}
Query Parameters:
 
  • term (string) – Generic search term support. See modifier list below for usage.
  • _from (string) – Start with search result _from.
  • _size (string) – Size of result set. Max to 50 (app_settings.catalog_max_results).
  • _sort_asc (string) – Sort ascending by index _sort_asc.
  • _sort_des (string) – Sort descending by index _sort_des.
  • _metadata (string) – List of metadata fields to include
  • _metadata_not (string) – List of metadata fields to exclude
  • __eq (string) –
  • __not (string) –
  • __gt (string) –
  • __gte (string) –
  • __lte (string) –
  • __lt (string) –
  • __in (string) –
Status Codes:
  • 200 OK – Search results
  • 401 Unauthorized – You are not authorized to perform the operation
  • 404 Not Found – The resource does not exist

Warning

The POST request to @search endpoint is not implemented.

POST /(db)/(container)/@search¶

Make a complex search query

  • Permission: guillotina.RawSearchContent
  • Context: guillotina.interfaces.content.IResource

http

POST /db/container/@search HTTP/1.1
Accept: application/json
Authorization: Basic cm9vdDpyb290

{
    "type_name": "Item",
    "_from": 10,
    "_size": 5,
    "modification_date__gt": "2019-06-15T18:37:31.008359+00:00",
    "_sort_asc": "modification_date",
    "_metadata": "title,description"
}

curl

curl -i -X POST http://nohost/db/container/@search -H 'Accept: application/json' --data-raw '{
    "type_name": "Item",
    "_from": 10,
    "_size": 5,
    "modification_date__gt": "2019-06-15T18:37:31.008359+00:00",
    "_sort_asc": "modification_date",
    "_metadata": "title,description"
}' --user root:root

httpie

echo '{
    "type_name": "Item",
    "_from": 10,
    "_size": 5,
    "modification_date__gt": "2019-06-15T18:37:31.008359+00:00",
    "_sort_asc": "modification_date",
    "_metadata": "title,description"
}' | http POST http://nohost/db/container/@search Accept:application/json -a root:root

response

HTTP/1.1 503 OK
Content-Type: application/json

{}
Status Codes:
  • 200 OK – Search results
  • 401 Unauthorized – You are not authorized to perform the operation
  • 404 Not Found – The resource does not exist

Use cases¶

  • Search for specific sentence on text field
  • Search for words on text field
  • Search for not having a value on a field
  • Search for wildcard on text field
  • Search for keyword on filter
  • Search for number and comparisons on numeric field
  • Search for paths
  • Define from which element you want to search
  • Define the search size return
  • Define metadata included and excluded on the result
  • Return full objects

Implementation details¶

A list:

query : term=first+second+third
result : term = first, second, third

Text field search specific text/sentence:

query : title__eq=my+sentence

Text field search words text:

query : title__in=my+sentence

Text field search not words text:

query : title__not=not+willing+words

Text field search wildcard text:

query : title__wildcard=will*

Keyword on filter:

query : subject=guillotina

Number on field:

query : age=39
query : age__gte=39
query : age__lte=39

Date on field:

query : creation=10-09-2018
query : creation__gte=10-09-2018
query : creation__lte=10-09-2018

Which metadata to return:

query : _metadata=title+description
query : _metadata_not=language+description

Sort:

query : _sort_asc=age

Search size:

query : _size=30

From which element to return:

query : _from=30

Search for paths:

query : path__starts=plone+folder
result : elements on /plone/folder

Escape +:

query : term=hola++adeu
result : term=hola+adeu

Return full object:

query : _fullobject=true

Examples¶

Plone call:

GET /plone/@search?path.query=%2Ffolder&path.depth=2

Guillotina call:

GET @search?path_starts=folder&depth_gte=2

Plone call:

GET /plone/@search?Title=lorem&portal_type=Document

Guillotina call:

GET @search?title_in=lorem&portal_type=Document

Aggregation¶

GET /(db)/(container)/(id)/@aggregation¶

Make aggregation request

  • Permission: guillotina.AccessContent
  • Context: guillotina.interfaces.content.IResource

http

GET /db/container/foobar/@aggregation HTTP/1.1
Accept: application/json
Authorization: Basic cm9vdDpyb290

curl

curl -i http://nohost/db/container/foobar/@aggregation -H 'Accept: application/json' --user root:root

httpie

http http://nohost/db/container/foobar/@aggregation Accept:application/json -a root:root

response

HTTP/1.1 503 OK
Content-Type: application/json

{}
Status Codes:
  • 200 OK – aggregation results
  • 401 Unauthorized – You are not authorized to perform the operation
  • 404 Not Found – The resource does not exist

Example:

@aggregation?title__eq=my+title&metadata=title,creators
{
  "title": {
    "items": {
      "Item2": 1
    },
    "total": 1
  },
  "creators": {
    "items": {
      "root": 1
    },
    "total": 1
  }
}
Logo

Guillotina 6.4.1 documentation

index routing table modules next previous
© Copyright 2020, Ramon Navarro Bosch & Nathan Van Gheem. Created using Sphinx 1.8.2.