{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "hit": {
      "properties": {
        "distanceKm": {
          "description": "For near: the distance in kilometres from the point to the record's nearest place, a decimal.",
          "maxLength": 16,
          "type": "string"
        },
        "record": {
          "refs": [
            "us.off-the-clock.defs#postView",
            "us.off-the-clock.defs#eventView",
            "us.off-the-clock.defs#bookmarkView",
            "us.off-the-clock.defs#documentView",
            "us.off-the-clock.defs#listingView",
            "us.off-the-clock.defs#reviewView",
            "us.off-the-clock.polls.pollView"
          ],
          "type": "union"
        },
        "score": {
          "description": "The mode's own number as a decimal: BM25 made positive for keyword and text, cosine similarity for semantic, 0 for a search by place alone. Lexicons carry no floats.",
          "maxLength": 32,
          "type": "string"
        },
        "snippet": {
          "description": "The matched text with each match between [ and ].",
          "maxLength": 2000,
          "type": "string"
        }
      },
      "required": [
        "record",
        "score"
      ],
      "type": "object"
    },
    "main": {
      "description": "Posts, events, bookmarks, polls, documents, listings and reviews of one content space the viewer reads, matching every part of a query and every other condition given: an H3 cell, a radius around a point and a bookmark's domain. The query's words and phrases rank the results and its other parts filter them; the parts read are answered in read. Only records the viewer may see are answered, never another space's. SearchUnavailable is answered for mode=semantic before any other parameter is read, so a call without query tells a client whether meaning search is on.",
      "errors": [
        {
          "name": "InvalidRequest"
        },
        {
          "name": "NotSpaceMember"
        },
        {
          "description": "mode=semantic on a site with no embeddings endpoint.",
          "name": "SearchUnavailable"
        }
      ],
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "cursor": {
              "type": "string"
            },
            "hits": {
              "items": {
                "ref": "#hit",
                "type": "ref"
              },
              "type": "array"
            },
            "mapUrl": {
              "description": "For a search by place: a signed map of this page's first ten hits, numbered in order (IMG-14), when a map provider is configured.",
              "format": "uri",
              "type": "string"
            },
            "noPlaces": {
              "description": "True on a search by place that found nothing in a space where no record has a place yet.",
              "type": "boolean"
            },
            "read": {
              "description": "The parts of the query as they were read, in reading order.",
              "items": {
                "ref": "#part",
                "type": "ref"
              },
              "type": "array"
            }
          },
          "required": [
            "hits",
            "read"
          ],
          "type": "object"
        }
      },
      "parameters": {
        "properties": {
          "cursor": {
            "type": "string"
          },
          "domain": {
            "description": "Bookmarks whose subject's host is this domain or a subdomain of it, case-insensitive.",
            "maxLength": 253,
            "type": "string"
          },
          "from": {
            "description": "Records sorted at or after this time.",
            "format": "datetime",
            "type": "string"
          },
          "h3": {
            "description": "An H3 cell index in hexadecimal, at resolution 4 to 10.",
            "maxLength": 16,
            "type": "string"
          },
          "limit": {
            "default": 25,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "mode": {
            "default": "best",
            "description": "best ranks full text and meaning together; keyword requires every word; text reads the words and phrases as a full-text query; semantic ranks by meaning.",
            "knownValues": [
              "best",
              "keyword",
              "text",
              "semantic"
            ],
            "maxLength": 16,
            "type": "string"
          },
          "near": {
            "description": "A point as decimal degrees, latitude,longitude.",
            "maxLength": 64,
            "type": "string"
          },
          "query": {
            "description": "The search as a member typed it, read whole (D100): words, \"phrases\", rating:N/10, @handle, mentions:@handle, type:X (post, reply, event, bookmark, document, poll, listing or review), has:X and no:X (parent, replies, tags; has:mentions), and #tag, combined with AND. Required unless h3, near or domain is given.",
            "maxLength": 300,
            "minLength": 1,
            "type": "string"
          },
          "space": {
            "description": "The pair's TID.",
            "format": "tid",
            "type": "string"
          },
          "until": {
            "description": "Records sorted before this time.",
            "format": "datetime",
            "type": "string"
          },
          "within": {
            "description": "The radius around near in kilometres, a decimal from 0.1 to 100; 5 by default.",
            "maxLength": 16,
            "type": "string"
          }
        },
        "required": [
          "space"
        ],
        "type": "params"
      },
      "type": "query"
    },
    "part": {
      "description": "One part of a query as it was read: one word, a phrase without its quotes, a rating's number, a handle or DID without its @, a type's name, a statement's name, or a tag without its #.",
      "properties": {
        "kind": {
          "knownValues": [
            "words",
            "phrase",
            "rating",
            "author",
            "type",
            "has",
            "hasNo",
            "mentions",
            "tag"
          ],
          "maxLength": 16,
          "type": "string"
        },
        "value": {
          "maxLength": 300,
          "type": "string"
        }
      },
      "required": [
        "kind",
        "value"
      ],
      "type": "object"
    }
  },
  "id": "us.off-the-clock.searchRecords",
  "lexicon": 1
}
