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

Marklogic中基于最大匹配词数提升文档搜索评分的实现咨询

MarkLogic按查询词匹配数量排序的搜索实现方案

要实现匹配查询词数量越多得分越高的规则,本质是对查询分词后的每个词做命中统计,命中数越高权重越高,以下是两种可直接落地的实现方案:


方案1:词项权重叠加实现(推荐,性能最优)

利用MarkLogic内置的评分机制,给每个拆分后的查询词设置相同的正权重,命中的词越多,总分累加值越高,无需自定义逻辑,性能最优。
示例代码(Server-side JavaScript):

// 1. 拆分查询字符串为独立词项,多语言场景可替换为cts.tokenize做专业分词
const searchText = "Today is my birthday";
const searchTerms = searchText.split(/\s+/).filter(item => item);

// 2. 为每个词构建查询,统一设置权重为1,限定仅匹配TitleName字段
const queryList = searchTerms.map(term => 
  cts.jsonPropertyWordQuery("TitleName", term, ["case-insensitive"], 1)
);
const finalQuery = cts.orQuery(queryList);

// 3. 执行搜索,simple评分模式会直接累加所有匹配查询的权重值
const searchResults = cts.search(
  finalQuery,
  ["score-simple", "descending"] // 按得分从高到低排序
);

// 输出结果
for (let doc of searchResults) {
  const docObj = doc.toObject();
  console.log(`文档ID:${docObj.Id},得分:${cts.score(doc)},标题:${docObj.TitleName}`);
}

运行结果完全匹配需求:

  • Doc3命中4个查询词,得分4,排第一
  • Doc1命中2个查询词,得分2,排第二
  • Doc2命中1个查询词,得分1,排第三
  • Doc4无命中,不会出现在结果列表中

方案2:自定义评分函数实现(灵活度最高)

如果后续需要叠加其他评分规则(比如词频、字段权重等),可以使用自定义评分函数直接返回命中词数作为评分:

const searchText = "Today is my birthday";
const searchTerms = searchText.split(/\s+/).filter(item => item).map(i => i.toLowerCase());

const searchResults = cts.search(
  // 可先加过滤条件缩小匹配范围,提升性能
  cts.jsonPropertyRangeQuery("TitleName", "exists"),
  [
    "custom",
    (doc, ctx) => {
      const title = (doc.toObject().TitleName || "").toLowerCase();
      // 统计命中的词数
      let hitCount = 0;
      searchTerms.forEach(term => {
        if (title.includes(term)) hitCount++;
      });
      return hitCount;
    }
  ],
  20 // 返回前20条结果
);

注意事项

  • 中文/多语言场景不要用空格拆分查询词,替换为cts.tokenize(searchText).map(t => t.toString()).filter(t => !/^\s+$/.test(t))调用MarkLogic内置分词器,分词更准确
  • 如果需要匹配整个文档的所有字段,把cts.jsonPropertyWordQuery替换为cts.wordQuery即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:48:02