Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion graphile/graphile-postgis/src/plugins/detect-extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export const PostgisExtensionDetectionPlugin: GraphileConfig.Plugin = {

// PostGIS is detected when at least one of geometry or geography
// codecs is present. Some databases use only geography columns
// (e.g. use_geography: true in DataPostGIS), so PostGraphile may
// (e.g. use_geography: true in SearchSpatial), so PostGraphile may
// introspect geography but not geometry.
if (!geometryCodec && !geographyCodec) {
return build;
Expand Down
4 changes: 2 additions & 2 deletions graphile/graphile-search/src/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ interface SearchScoreDetails {

/**
* Per-table search configuration read from the @searchConfig smart tag.
* Written by DataFullTextSearch, DataBm25, and DataSearch in constructive-db.
* Written by SearchFullText, SearchBm25, and SearchUnified in constructive-db.
*/
interface SearchConfig {
weights?: Record<string, number>;
Expand Down Expand Up @@ -488,7 +488,7 @@ export function createUnifiedSearchPlugin(
}
}

// Read per-table @searchConfig smart tag (written by DataSearch/DataFullTextSearch/DataBm25)
// Read per-table @searchConfig smart tag (written by SearchUnified/SearchFullText/SearchBm25)
// Per-table config overrides global searchScoreWeights
const tableSearchConfig = getSearchConfig(codec);

Expand Down
288 changes: 147 additions & 141 deletions graphql/node-type-registry/src/blueprint-types.generated.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion graphql/node-type-registry/src/codegen/generate-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -755,7 +755,7 @@ function buildProgram(meta?: MetaTableInfo[]): string {
const authzNodes = allNodeTypes.filter((nt) => nt.category === 'authz');

// -- Parameter interfaces grouped by category --
const categoryOrder = ['data', 'authz', 'relation', 'view'];
const categoryOrder = ['data', 'search', 'authz', 'relation', 'view'];
for (const cat of categoryOrder) {
const nts = categories.get(cat);
if (!nts || nts.length === 0) continue;
Expand Down
14 changes: 7 additions & 7 deletions graphql/node-type-registry/src/data/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ export { DataTimestamps } from './data-timestamps';
export { DataPeoplestamps } from './data-peoplestamps';
export { DataPublishable } from './data-publishable';
export { DataSoftDelete } from './data-soft-delete';
export { DataEmbedding } from './data-embedding';
export { DataFullTextSearch } from './data-full-text-search';
export { DataBm25 } from './data-bm25';
export { DataSearch } from './data-search';
export { DataPostGIS } from './data-postgis';
export { DataPostGISAggregate } from './data-postgis-aggregate';
export { SearchVector } from './search-vector';
export { SearchFullText } from './search-full-text';
export { SearchBm25 } from './search-bm25';
export { SearchUnified } from './search-unified';
export { SearchSpatial } from './search-spatial';
export { SearchSpatialAggregate } from './search-spatial-aggregate';
export { DataJobTrigger } from './data-job-trigger';
export { DataTags } from './data-tags';
export { DataStatusField } from './data-status-field';
export { DataJsonb } from './data-jsonb';
export { DataTrgm } from './data-trgm';
export { SearchTrgm } from './search-trgm';
export { DataSlug } from './data-slug';
export { DataInflection } from './data-inflection';
export { DataOwnedFields } from './data-owned-fields';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { NodeTypeDefinition } from '../types';

export const DataBm25: NodeTypeDefinition = {
"name": "DataBm25",
"slug": "data_bm25",
"category": "data",
export const SearchBm25: NodeTypeDefinition = {
"name": "SearchBm25",
"slug": "search_bm25",
"category": "search",
"display_name": "BM25 Search",
"description": "Creates a BM25 index on an existing text column using pg_textsearch. Enables statistical relevance ranking with configurable k1 and b parameters. The BM25 index is auto-detected by graphile-search.",
"parameter_schema": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { NodeTypeDefinition } from '../types';

export const DataFullTextSearch: NodeTypeDefinition = {
"name": "DataFullTextSearch",
"slug": "data_full_text_search",
"category": "data",
export const SearchFullText: NodeTypeDefinition = {
"name": "SearchFullText",
"slug": "search_full_text",
"category": "search",
"display_name": "Full-Text Search",
"description": "Adds a tsvector column with GIN index and automatic trigger population from source fields. Enables PostgreSQL full-text search with configurable weights and language support. Leverages the existing metaschema full_text_search infrastructure.",
"parameter_schema": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type { NodeTypeDefinition } from '../types';

export const DataPostGISAggregate: NodeTypeDefinition = {
"name": "DataPostGISAggregate",
"slug": "data_postgis_aggregate",
"category": "data",
"display_name": "PostGIS Aggregate Geometry",
export const SearchSpatialAggregate: NodeTypeDefinition = {
"name": "SearchSpatialAggregate",
"slug": "search_spatial_aggregate",
"category": "search",
"display_name": "Spatial Aggregate Search",
"description": "Creates a derived/materialized geometry field on the parent table that automatically aggregates geometries from a source (child) table via triggers. When child rows are inserted/updated/deleted, the parent aggregate field is recalculated using the specified PostGIS aggregation function (ST_Union, ST_Collect, ST_ConvexHull, ST_ConcaveHull). Useful for materializing spatial boundaries from collections of points or polygons.",
"parameter_schema": {
"type": "object",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type { NodeTypeDefinition } from '../types';

export const DataPostGIS: NodeTypeDefinition = {
"name": "DataPostGIS",
"slug": "data_postgis",
"category": "data",
"display_name": "PostGIS Geometry",
export const SearchSpatial: NodeTypeDefinition = {
"name": "SearchSpatial",
"slug": "search_spatial",
"category": "search",
"display_name": "Spatial Search",
"description": "Adds a PostGIS geometry or geography column with a spatial index (GiST or SP-GiST). Supports configurable geometry types (Point, Polygon, etc.), SRID, and dimensionality. The graphile-postgis plugin auto-detects geometry/geography columns by codec type for spatial filtering (ST_Contains, ST_DWithin, bbox operators).",
"parameter_schema": {
"type": "object",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { NodeTypeDefinition } from '../types';

export const DataTrgm: NodeTypeDefinition = {
"name": "DataTrgm",
"slug": "data_trgm",
"category": "data",
export const SearchTrgm: NodeTypeDefinition = {
"name": "SearchTrgm",
"slug": "search_trgm",
"category": "search",
"display_name": "Trigram Search",
"description": "Creates GIN trigram indexes (gin_trgm_ops) on specified text/citext fields for fuzzy LIKE/ILIKE/similarity search. Adds @trgmSearch smart tag for PostGraphile integration. Fields must already exist on the table.",
"parameter_schema": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import type { NodeTypeDefinition } from '../types';

export const DataSearch: NodeTypeDefinition = {
"name": "DataSearch",
"slug": "data_search",
"category": "data",
export const SearchUnified: NodeTypeDefinition = {
"name": "SearchUnified",
"slug": "search_unified",
"category": "search",
"display_name": "Unified Search",
"description": "Composite node type that orchestrates multiple search modalities (full-text search, BM25, embeddings, trigram) on a single table. Configures per-table search score weights, normalization strategy, and recency boost via the @searchConfig smart tag.",
"parameter_schema": {
"type": "object",
"properties": {
"full_text_search": {
"type": "object",
"description": "DataFullTextSearch parameters. Omit to skip FTS setup.",
"description": "SearchFullText parameters. Omit to skip FTS setup.",
"properties": {
"field_name": {
"type": "string",
Expand Down Expand Up @@ -51,7 +51,7 @@ export const DataSearch: NodeTypeDefinition = {
},
"bm25": {
"type": "object",
"description": "DataBm25 parameters. Omit to skip BM25 setup.",
"description": "SearchBm25 parameters. Omit to skip BM25 setup.",
"properties": {
"field_name": {
"type": "string"
Expand All @@ -74,7 +74,7 @@ export const DataSearch: NodeTypeDefinition = {
},
"embedding": {
"type": "object",
"description": "DataEmbedding parameters. Omit to skip embedding setup.",
"description": "SearchVector parameters. Omit to skip embedding setup.",
"properties": {
"field_name": {
"type": "string",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type { NodeTypeDefinition } from '../types';

export const DataEmbedding: NodeTypeDefinition = {
"name": "DataEmbedding",
"slug": "data_embedding",
"category": "data",
"display_name": "Embedding",
export const SearchVector: NodeTypeDefinition = {
"name": "SearchVector",
"slug": "search_vector",
"category": "search",
"display_name": "Vector Search",
"description": "Adds a vector embedding column with HNSW or IVFFlat index for similarity search. Supports configurable dimensions, distance metrics (cosine, l2, ip), stale tracking strategies (column, null, hash), and automatic job enqueue triggers for embedding generation.",
"parameter_schema": {
"type": "object",
Expand Down
Loading