
Tile38 的 HTTP API 不支持 && 逻辑运算符,需改用连续 WHERE 子句实现 AND 条件组合;CLI 可用 &&,但 HTTP 请求中必须避免 HTML 实体转义与非法字符,否则触发 "invalid argument '&&'" 错误。
tile38 的 http api 不支持 `&&` 逻辑运算符,需改用连续 `where` 子句实现 and 条件组合;cli 可用 `&&`,但 http 请求中必须避免 html 实体转义与非法字符,否则触发 "invalid argument '&&'" 错误。
在 Tile38 中,对地理数据执行带属性过滤的查询(如时间范围筛选)时,CLI 和 HTTP 接口的语法存在关键差异:CLI 支持 && 连接多个条件,而 HTTP 端点(如 / 或 localhost:9851)不解析 &&,会直接报错 {"ok":false,"err":"invalid argument '&&'"}。这是因为 Tile38 的 HTTP 解析器将 && 视为非法 token,而非逻辑操作符。
✅ 正确做法是:使用多个独立的 WHERE 子句替代 &&,每个条件单独写一个 WHERE,系统默认按 AND 语义串联。例如:
# ✅ 正确:HTTP 兼容写法(两个 WHERE) curl --location 'http://localhost:9851' \ --header 'Content-Type: text/plain' \ --data 'within evidence where "timestamp >= 1654128000" where "timestamp <p>⚠️ 注意事项:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/ai/821" title="智谱清言 - 免费全能的AI助手"><img src="https://img.php.cn/upload/ai_manual/000/000/000/175679976181507.png" alt="智谱清言 - 免费全能的AI助手" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/ai/821" title="智谱清言 - 免费全能的AI助手" class="overflowclass">智谱清言 - 免费全能的AI助手</a> <p class="overflowclass">智谱清言是一款基于 GLM 大模型的通用 AI 助手与 Agent 工具。</p> </div> <a rel="nofollow" href="/ai/821" title="智谱清言 - 免费全能的AI助手" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
- 不要对 & 进行 HTML 实体编码(如 &&):这会导致服务端收到字面字符串 &&,仍报错;
- 引号需严格匹配:外层用单引号包裹整个命令体,内部字符串(如时间表达式)用双引号(或转义的单引号),确保 Shell 不提前解析;
- 空格与换行敏感:WHERE 关键字前后必须有空格,且不能跨行断裂;
- 该方式仅支持 AND 逻辑;如需 OR 或嵌套逻辑,需在客户端预处理或借助 Lua 脚本(EVAL)实现。
? 补充示例(多属性 AND 查询):
# 查询 val == 4 且 name == "count_three" 的对象 curl -X POST http://localhost:9851 \ -H "Content-Type: text/plain" \ -d 'SCAN geo=1 WHERE "properties.val == 4" WHERE "properties.name == \"count_three\""'
总结:Tile38 的 HTTP 过滤机制采用“声明式多 WHERE”而非“表达式内联逻辑符”。掌握这一约定可避免 90% 的 invalid argument 类错误。建议在生产环境中封装请求构造逻辑,自动将 AND 条件转换为链式 WHERE,提升健壮性与可维护性。










