【问题标题】:MongoDB fulltext search taking start of the wordMongoDB全文搜索以单词开头
【发布时间】:2016-09-14 06:05:02
【问题描述】:

我的 MongoDB 查询有问题,我需要在我的字段内搜索,并且只从单词的开头搜索,而不是 100% 匹配的单词。

在我遇到这个问题之前,我使用$regex,这里没问题,唯一的问题是它比$text 搜索慢很多,所以现在我希望那里的人可以帮助我。

这是我今天的查询

db.getCollection('product').aggregate([
   {$match : {$text: { $search : "\"samsung\" \"evo\" } } },
   {$project: { _id: 0, Category: 1 } },
   {$unwind: "$Category" },
   {$group: { _id: '$Category', count: { $sum: 1 } } },
   {$project: { _id: 0,Category: "$_id", count: 1 } },
   {$sort: { 'count': -1 } },
   {$limit: 5}
])

我已经尝试过,正如我之前所说的,我之前使用过 $regex,但这里它不使用任何类型的索引,然后 MongoDB 中的查询非常慢,并且所有内容都停滞不前,就像每个 0.4 秒对 0.03 秒查询。

所以如果有一个可以向我解释发生了什么以及解决方案是如何以及为什么它会对我有很大帮助。

现在“匹配 100% 三星和 evo”这个词我想要的是我可以像 sam 和 evo 一样输入然后它找到那里有 evo 的所有内容并以 sam 开头,这将使用户的搜索速度更快。

感谢所有帮助。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    Regex 或正则表达式总是比文本搜索慢。可能的解决方案是:

    • 在插入文档时,添加另一个field,它在插入时对文档进行分类。(这与数据库设计有关)。这将允许使用 text 轻松搜索。
    • 切换到elasticsearch(这可能不太可行,取决于您的项目阶段)

    【讨论】:

    • 如何在 MongoDB 中使用 elasticsearch?听起来很有趣。
    • @ParisNakitaKejser Elasticsearch 是一个搜索引擎文档存储,你不要在 in MongoDB 中使用它。检查此page。还有这个wiki
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多