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