MongoDB文本搜索和多个搜索词

kme*_*hta 38 full-text-search mongodb

我有一个数组"键"的索引,我用它来为我的应用程序提供全文功能.

随着2.4.3的发布,我想使用"text"索引类型.我在我的数组"keys"上保证了一个"文本"索引类型,它似乎工作速度超快(比我的旧关键字全文方法更快).

问题是,我的应用程序假设字段是包容性的(AND).默认情况下,文本搜索OR我的参数.

有没有人知道一种包含文本搜索的方法?

例如:

db.supplies.runCommand("text", {search:"printer ink"})
Run Code Online (Sandbox Code Playgroud)

应该使用打印机和墨水返回结果,而不是使用打印机或墨水的所有结果.

ale*_*cxe 68

尝试:

db.supplies.runCommand("text", {search:"\"printer\" \"ink\""})
Run Code Online (Sandbox Code Playgroud)

另外,这是来自docs的引用:

如果搜索字符串包含短语,则搜索与搜索字符串中的任何其他术语执行AND; 例如,搜索"\"twinkle twinkle \"little star"搜索"twinkle twinkle"和("little"或"star").

希望有所帮助.

  • 请注意,这会引发文本索引的酷炫功能,就像词汇一样,无论如何都会进入垃圾箱.如果我的文本是"这些是一些很酷的测试条目",我会用`{$ search:"entry"}`找到它,但不能用`{$ search:"\"entry \""}`找到它. (11认同)
  • 以下是JS中一系列单词的示例,如果有帮助,可以创建索引:`var queryString ='\"'+ q.split('').join('\"\"')+'\" "; var res = mycollection.find({$ text:{$ search:queryString,$ language:"fr"}});`和mongo`db.mycollection.createIndex({"fieldName":"text"}) (4认同)
  • 您.岩石.先生.谢谢. (3认同)
  • @Mitja 有什么方法可以在不丢失词干的情况下做到这一点? (2认同)
  • 重要通知:仅适用于双引号!单引号的行为类似于标准的$ text搜索. (2认同)

cho*_*ovy 5

您可以将每个单词用双引号括起来:

let keywords = ctx.params.query.split(/\s+/).map(kw => `"${kw}"`).join(' ');
match.$text = { $search: keywords, $caseSensitive: false };
Run Code Online (Sandbox Code Playgroud)

如果用户输入带引号的字符串,则有一个缺点,这将不起作用。您必须首先解析带引号的字符串。