如何在MongoDB中的全文搜索中从列表中强制至少一个术语

如何在MongoDB中的全文搜索中从列表中强制至少一个术语,mongodb,Mongodb,我无法在MongoDB中找到具体的全文搜索。在MongoDB文档中,我找不到一种方法可以强制列表中至少有一个术语,就像我在MySQL中使用+登录一样。例如,在MySQL中,我无法定义:“+green+(red-blue)”,它选择一些索引列中包含“green”和(“red”或“blue”)的所有行。请注意,如果某行仅包含绿色,则不会选择该行。MongoDB中有一个“类似”的行为,但它实际上并不像我需要的那样工作。让我举一个例子: 因此,我创建了集合调色板来验证这个概念: db.palette.i

我无法在MongoDB中找到具体的全文搜索。在MongoDB文档中,我找不到一种方法可以强制列表中至少有一个术语,就像我在MySQL中使用+登录一样。例如,在MySQL中,我无法定义:
“+green+(red-blue)”
,它选择一些索引列中包含
“green”和(“red”或“blue”)
的所有行。请注意,如果某行仅包含
绿色
,则不会选择该行。MongoDB中有一个“类似”的行为,但它实际上并不像我需要的那样工作。让我举一个例子:

因此,我创建了集合调色板来验证这个概念:

db.palette.insertMany([
    {colors: "green,black"}, 
    {colors: "green,red"}, 
    {colors: "green,blue"}
])
然后我创建了一个文本索引:

db.palette.createIndex({colors: "text"})
注意,MongoDB首先在内部用逗号分割字符串值,以便索引单词,我甚至使用
db.palete.validate()
information检查了这一点。最后,我尝试使用以下字符串进行搜索:

db.palette.find({$text: {$search: "\"green\" red blue"}})
我只需要检索第二个和第三个文档,但结果也包括第一个文档(
“绿色,黑色”
)。我猜这是因为上面描述的MongoDB规则:
“绿色”和(“红色”或“蓝色”或“绿色”)
所以最后一个条件总是
true
。为了测试不同的模式,我将
colors
字段拆分为
color1
color2
,然后创建了一个复合文本索引,但结果相同


那么:MongoDB中是否有任何方法可以进行我需要的查询?

您可以使用正则表达式功能进行此查询。例如:

db.palette.find({colors:{$in:[/green.*red/,/green.*blue/]}})

文档:

最后我写信给MongoDB的家伙们。他们的回答是:

正在中跟踪此功能请求。请随意投票并观看更新


因此,目前没有办法满足我的需要:(

谢谢@Moi,但我被迫只使用全文搜索来解决问题。真正的问题是对40多个字段进行文本搜索,所以我只是用一种更简单的方式减少了问题,只是一个简单的颜色示例。
db.palette.find({colors:{$in:[/green.*red/,/green.*blue/]}})