近似于Algolia标准“简单”搜索规则的AWS CloudSearch查询

问题描述

我正在从Algolia迁移到AWS CloudSearch(正在搜索约15万条记录,而Algolia对于个人项目来说太昂贵了),并且发现自己在其结果中缺少algolia的一般智慧和直观性为您提供基本查询,而无需将任何复杂的解析和查询语法转换应用于用户输入的搜索字符串。

我敢肯定,其中很多都是阿尔戈利亚的专有技术,部分是阿尔及利亚的“秘密调味料”,但是那里是否有任何预先构建的解决方案,用于解析/格式化原始用户输入的搜索字符串并将其转换为松散的CloudSearch的结构化语法近似于从algolia的“基本”搜索相同字符串中获得的结果? (假设搜索将应用于文档中的所有文本字段)。

例如,开箱即用,algolia将给出部分/前缀匹配的结果(例如,对于“ appl”,您将获得“ apple”的结果),以及不精确/草率的结果单词短语,拼写错误的单词,未完成的短语等。虽然我能够使用CloudSearch的结构化语法重新实现其中的一些功能,但结果却不一致,而且还不太完全。这是我为此开始的一些逻辑示例:

function formatSearchTerm(term: string,distance = 25) {
  let formatted = escapeSearchTerm(term.trim());
  let words = formatted.split(/\s+/);
  let lastWord = words[words.length - 1];

  if (quotedRegex.test(term)) {
    return `(phrase '${stripQuotes(formatted)}')`;
  }

  if (!singleWordRegex.test(term)) {
    return `(or (near distance=${distance} '${formatted}') (prefix '${lastWord}'))`;
  }

  return `(or (prefix '${formatted}') '${formatted}')`;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)