当前位置: 首页 > 知识库问答 >
问题:

MongoDB全文搜索+部分字匹配解决方案

方昊英
2023-03-14

由于使用mongodb全文搜索不可能通过“蓝”这个词找到“蓝莓”,所以我想帮助我的用户完成“蓝”到“蓝莓”这个词。要这样做,是否可以查询mongodb全文索引->中的所有单词,我可以使用这些单词作为建议,即用于typeahead.js?

共有1个答案

公冶森
2023-03-14

文本搜索中的语言词干法使用一种算法来尝试将从一个公共基础中导出的单词联系起来(例如,“running”应该与“run”匹配)。这不同于您希望为自动完成特性实现的前缀匹配(例如,“blue”匹配“blueberry”)。

为了最有效地将Typeahead.js与MongoDB文本搜索一起使用,我建议关注TypeAhead中的Prefetch支持:

>

  • 创建一个keywords集合,其中包含集合中使用的常用单词(可能带有使用频率计数)。您可以通过在拥有文本搜索索引的集合中运行map/reduce来创建这个集合,并在添加新文档时使用定期增量map/reduce来保持单词列表的最新。

    然后,您可以使用生成的关键字JSON进行客户端自动完成,并使用TypeAhead的prefetch特性:

    $('.mysearch .typeahead').typeahead({
      name: 'mysearch',
      prefetch: '/data/keywords.json'
    });
    

    typeahead.js将在localStorage中缓存prefetchJSON数据,以供客户端搜索。当提交搜索表单时,您的应用程序可以使用服务器端MongoDB文本搜索按相关性顺序返回完整结果。

  •  类似资料:
    • 带有Mongoose的MongoDB(3.2.0) 收藏: 用户 null 查询: =>找到 =>找到(搜索大小写敏感为false) =>找到(使用diacriticSensitive搜索为false) =>找到(部分搜索) =>未找到(部分搜索) =>未找到(部分搜索) 你知道为什么我用查询“Leo”或“L”得到0个结果吗? null

    • 问题内容: 我想编写一个SQL查询,该查询在文本字段中搜索关键字,但是仅当它是“全字匹配”时(例如,当我搜索“ rid”时,它不应该与“ arid”匹配,但是应该匹配“摆脱”。 我正在使用MySQL。 幸运的是,在该应用程序中性能并不是至关重要的,并且数据库大小和字符串大小都非常小,但是我更喜欢在SQL中而不是在PHP中驱动它。 问题答案: 您可以使用和和字边界标记: 2020年更新:(实际上是2

    • 问题内容: 使用GAE搜索API是否可以搜索部分匹配项? 我正在尝试创建自动完成功能,其中该术语将是部分单词。例如。 b bui 构建 都将返回“建筑物”。 GAE怎么可能? 问题答案: 尽管全文搜索不支持LIKE语句(部分匹配),但是您可以修改它。 首先,为所有可能的子字符串标记数据字符串(hello = h,he,hel,lo等) 使用标记化的字符串构建索引+文档(搜索API) 执行搜索,然后

    • 问题内容: 使用Sql Server 2008,您如何才能使用全文本搜索实际找到完全匹配的字符串。我对此很难过,只是在网上的任何地方都找不到令人满意的解决方案。 例如,如果我要搜索字符串“ Bojan Skrchevski”,则我希望第一个结果就是那个。 到目前为止,我已经尝试将字符串格式化为“ Bojan * NEAR Skrchevski *”并调用CONTAINSTABLE以获取结果,但是此

    • 问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回

    • 问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值