如果有问题我提前道歉,我没有找到答案就进行了搜索。
我想在MongoDB中进行搜索,并创建索引并执行类似
的操作db.myCollection.runCommand( "text", { search: "myWord" } )
这很好用。
我也可以
db.myCollection.runCommand( "text", { search: "myWord1 myWord2" } )
它将搜索两个单词。
我可以通过询问找到两个单词来进行上述搜索吗? (我知道我可以搜索第一个单词然后搜索结果中的第二个单词,但我想知道是否有更好的方法。)
此外,是否可以指定要拒绝的单词(例如,搜索单词“test”,而不是“test”)。
我想知道我是否可以在不使用外部工具的情况下在mongoDB中执行此操作。
答案 0 :(得分:12)
您可以使用一些选项来进行文本搜索以满足这些需求。请考虑以下文件:
{ "text" : "cake" }
{ "text" : "sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale" }
{ "text" : "dress sale" }
{ "text" : "cake sale monday" }
默认"列表"单词是或包含,但如果您想要包含和,则引用"引用"单词:
db.words.find( { "$text": { "$search": "\"cake\" \"sale\"" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale monday" }
如果您想排除一个字,那么您的前缀为-
:
db.words.find( { "$text": { "$search": "\"cake\" \"sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
如果您想将其中的一部分视为确切短语,那么您"引用"整个短语:
db.words.find( { "$text": { "$search": "\"cake sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
虽然词干有问题,但是:
db.words.find( { "$text": { "$search": "test -testing" } },{_id: 0})
实际上不会返回结果。
有关示例,请参阅$text
运算符上的文档。目前并非所有人都在那里,但情况正在好转。