qobrix_search_projects
Search real-estate projects with precise filters for must-haves and weighted preferences for nice-to-haves, returning top matches ranked by relevance.
Instructions
Highly relevant project (development) search for free-language demand (F1-optimized). TWO-TIER RECIPE: (1) search = hard DSL must-haves (server filter → precision). (2) boost[] = soft weighted nice-to-haves scored over up to max_scan candidates (recall + ranking). (3) limit = how many ranked rows to return (default 10, max 100). With boost: top-N with _relevance and _matched; pagination.mode='ranked'. Without boost: fast path single cached page; pagination.mode='fast'. Call qobrix_search_dsl_help({resource:'Projects'}) for DSL + field cheatsheet. Example: search='city contains "Paphos"', boost=[{field:'starting_price_from',op:'<=',value:400000,weight:2},{field:'construction_stage',op:'==',value:'under_construction',weight:1}], limit=10, max_scan=150. When expand=true or media=true, max_scan is auto-capped at 100. If status='result_too_large' with _refine_required, ask the user to narrow then retry. All upstream pages are response-cached.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). Used on the fast path (no boost). Ignored when boost is set (ranking returns a single top-N page). | |
| sort | No | Sort by field name (maps to Qobrix OpenAPI sort[]). Prefix with - for descending. Comma-separated for multi-key (e.g. '-list_selling_price_amount,-created'). Examples: '-created' (newest first), 'name' (alphabetical), '-list_selling_price_amount' (highest list price first). | |
| boost | No | Soft relevance criteria (nice-to-haves). Never filters out rows — only ranks them. When present, the tool scans up to max_scan candidates matching `search`, scores each row as the sum of matched clause weights, and returns the top `limit` with _relevance and _matched. Put must-haves in `search`; put preferences here. Example: [{field:'sea_view',op:'==',value:true,weight:3},{field:'bedrooms',op:'>=',value:3,weight:2}]. | |
| limit | No | How many results to return (1-100, default 10). With boost: top-N after ranking. Without boost: page size. Raise when the user wants more options; keep low to avoid context overload. | |
| media | No | Include inline media on each row. Default false. | |
| expand | No | Expand FK references into nested objects. Default false. | |
| fields | No | Limit response to specific fields only (partial response). Reduces payload size. Example: ['id','name','status','list_selling_price_amount']. Omit to get all fields. | |
| search | No | Hard-filter Qobrix search expression (server-side precision). Operators: == != <> < > <= >=, contains, starts with, ends with, in [...], not in, ranges in a..b, and/or/not. Functions: DISTANCE_FROM, IN_POLYGON, TRANSLATED, MIN/MAX, DAYS_AGO(n), MONTHS_AGO(n), DAYS_FROM_NOW(n). Shortcuts: NOW, TODAY, THIS_WEEK, LAST_MONTH, THIS_YEAR, CURRENT_USER. Strings double-quoted; booleans true/false; association paths e.g. SalespersonUsers.Contacts.country. Example: status == "available" and sale_rent == "for_sale" and list_selling_price_amount <= 500000. For the full grammar + field cheatsheets call qobrix_search_dsl_help. For enum values call qobrix_get_field_options; for all fields call qobrix_get_schema. | |
| max_scan | No | Candidate pool size when boost is set (default 100, hard cap 500). When expand=true or media=true the effective scan is capped at 100 (pagination.scan_capped_reason='expand/media') to keep latency and payload size safe. Higher improves recall (less chance of missing a good listing) but costs more API pages. Ignored on the fast path (no boost). Each scanned page is response-cached. |