如何在Mongodb中找到部分搜索?

时间:2017-05-01 10:49:41

标签: mongodb

如何查找部分搜索?

现在我试图找到

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

如果你有单词烹饪,以下查询可能会给你结果

  • 烹饪(精确匹配)
  • coo(部分词语)
  • cooked(包含文档单词的英文词根的单词,其中cook是烹饪或烹饪的根词)

如果您想更进一步,当您输入提示(错过V而不是C)时,请获取包含烹饪的结果文档,请转到elasticsearch。< / p>

Elasticsearch易于设置,具有极其强大的edge-ngram分析器,可将每个单词转换为较小的权重单词。因此,当您拼错时,您仍将获得基于弹性搜索得分的文档。

您可以在此处阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

答案 1 :(得分:0)

它会始终返回空数组以获取部分单词,例如当您搜索 lond 以获取此类文本 london ..

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

没有达到相同的结果,如: -

LO LON LOND LONDO LONDON

您可以从 ELASTIC-SEARCH 获得帮助。使用mongoDB实现时,对于全文搜索非常有用。

参考:ElasticSearch

由于

答案 2 :(得分:0)

全部找到一个数组 clientDB.collection('details').find({}).toArray().then((docs) =>

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

        if (docs[i].name.startsWith('U', 0)) {
          return console.log(docs[i].name);

        } else {
            console.log('Record not found!!!')
        };

这可能效率不高,但目前可以使用