You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SOLR特殊Filter Query URL解析为规范JavaScript对象?

SOLR Filter Query URL 解析方案

需求说明

我们在SOLR中使用如下格式的Filter Query URL:

?pageSize=30&currentPage=0&q=blahblah:relevance,sortingNumber-asc:productgroup:houseHoldSoap:soapVariant:TMZ:lengthToBeginningOfEdge:381.0-to-381.0

需要将其解析为结构规范的JavaScript对象,目标结构如下:

{
  pageSize: 30,
  currentPage: 0,
  sorting: ["relevance", "sortingNumber-asc"],
  filterQuery: [
        {"productgroup": "houseHoldSoap"},
        {"soapVariant": "TMZ"},
        {"lengthToBeginningOfEdge": "381.0-to-381.0" }
  ]
}

此前尝试自行编写解析器,但因URL语法复杂(键值对与排序值混用冒号分隔)难以实现,现需要可直接传入URL字符串并返回上述规范对象的JavaScript函数。

自定义解析函数

由于该URL格式属于自定义的SOLR查询参数组合,暂无现成工具库直接支持,以下是针对性的解析函数:

function parseSolrFilterUrl(urlStr) {
  // 解析URL查询参数
  const urlParams = new URLSearchParams(urlStr);
  const result = {
    pageSize: parseInt(urlParams.get('pageSize'), 10),
    currentPage: parseInt(urlParams.get('currentPage'), 10),
    sorting: [],
    filterQuery: []
  };

  const qValue = urlParams.get('q');
  if (!qValue) return result;

  // 拆分q参数,忽略前缀"blahblah:",处理后续内容
  const qParts = qValue.split(':');
  const contentSegments = qParts.slice(1);

  // 提取排序规则:第一个分段是逗号分隔的排序项
  result.sorting = contentSegments[0].split(',');

  // 提取过滤条件:剩余分段按"键:值"成对分组
  const filterSegments = contentSegments.slice(1);
  for (let i = 0; i < filterSegments.length; i += 2) {
    if (i + 1 < filterSegments.length) {
      result.filterQuery.push({
        [filterSegments[i]]: filterSegments[i + 1]
      });
    }
  }

  return result;
}

// 测试示例
const testUrl = '?pageSize=30&currentPage=0&q=blahblah:relevance,sortingNumber-asc:productgroup:houseHoldSoap:soapVariant:TMZ:lengthToBeginningOfEdge:381.0-to-381.0';
console.log(parseSolrFilterUrl(testUrl));

函数说明

  1. 利用URLSearchParams快速解析URL中的顶级参数(pageSize、currentPage);
  2. 拆分q参数,忽略固定前缀blahblah:;
  3. 从拆分后的分段中提取逗号分隔的排序规则,存入sorting数组;
  4. 将剩余分段按“键-值”成对分组,生成filterQuery数组中的对象。

内容的提问来源于stack exchange,提问作者Stefan Brendle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:46:22