【问题标题】:how to find partial search in Mongodb?如何在MongoDB中找到部分搜索?
【发布时间】:2017-05-01 10:49:41
【问题描述】:

如何找到部分搜索?

现在我正在寻找

db.content.find({$text: {$search: "Customer london"}})

它找到匹配customer的所有记录,以及匹配london的所有记录。

如果我正在搜索单词的一部分,例如 londcustom

db.content.find({$text: {$search: "lond"}})

它返回一个空结果。如何修改查询以获得与搜索 london 时相同的结果?

【问题讨论】:

标签: mongodb


【解决方案1】:

您可以使用正则表达式来解决它 (https://docs.mongodb.com/manual/reference/operator/query/regex/)。但是,它适用于以下情况:

如果你有Cooking这个词,下面的查询可能会给你结果

  • 烹饪(精确匹配)
  • coo(词的一部分)
  • cooked(包含文档词的英文词根的词,其中cook 是词根词,由cooking 或cooked 派生)

如果您想更进一步,在键入 vooking(拼错的 V 而不是 C)时获得包含 cooking 的结果文档,请使用 elasticsearch。

Elasticsearch 易于设置,具有极其强大的 edge-ngram 分析器,可将每个词转换为更小的权重词。因此,当您拼写错误时,您仍然会根据 elasticsearch 对该文档的评分获得一个文档。

你可以在这里阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

【讨论】:

  • 如果我搜索两个单词会怎样。我想查找包含每个单词或其中一个单词的所有记录,例如 Customer london
【解决方案2】:

当你搜索 lond 以获取这种类型的文本 london..

时,它将始终返回部分单词的空数组

因为它需要完整的单词并且搜索与它们相同..

无法获得相同的结果,例如:-

伦敦 伦敦 伦敦 伦敦 伦敦

您可以在此处获得 ELASTIC-SEARCH 的帮助。使用 mongoDB 实现全文搜索非常好。

参考:ElasticSearch

谢谢

【讨论】:

    【解决方案3】:

    find all 是一个数组 clientDB.collection('details').find({}).toArray().then((docs) =>

    我现在在 for 循环中使用 str.StartWith 来挑选我的记录。

            if (docs[i].name.startsWith('U', 0)) {
              return console.log(docs[i].name);
    
            } else {
                console.log('Record not found!!!')
            };
    

    这可能效率不高,但现在可以使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多