如果我存储了一些像
这样的数据,是否可以搜索字符串姓名:
{
name: 'john'
},
{
name: 'pete'
},
{
name: 'jack smith'
}
然后我执行类似
的查询{ $stringContainsKeys: 'pete said hi to jack smith' }
它会返回
{
name: 'pete'
},
{
name: 'jack smith'
}
我不确定这在mongoDB中是否可行,或者这种搜索是否具有特定名称。
答案 0 :(得分:2)
是的,很可能通过使用 $text
运算符来执行文本搜索,该文本搜索使用 text index索引的字段强>
假设您有以下测试文档:
db.collection.insert([
{
_id: 1, name: 'john'
},
{
_id: 2, name: 'pete'
},
{
_id: 3, name: 'jack smith'
}
])
首先,您需要在文档的name
字段上创建文本索引:
db.collection.createIndex( { "name": "text" } )
然后对搜索字符串的每个术语执行逻辑OR搜索,该搜索字符串以空格分隔并返回包含任何术语的文档
以下查询搜索指定了一个由空格分隔的六个术语的 $search
字符串," pete对插孔史密斯说":
db.collection.find( { "$text": { "$search": "pete said hi to jack smith" } } )
此查询返回包含 pete 或表示或 hi 或至或 jack的文档索引name
字段中的或 smith :
/* 0 */
{
"_id" : 3,
"name" : "jack smith"
}
/* 1 */
{
"_id" : 2,
"name" : "pete"
}
答案 1 :(得分:0)
从Mongodb 2.6开始,您可以搜索mongodb集合以匹配任何搜索字词。
db.names.find( { $text: { $search: "pete said hi to jack smith" } } )
这将搜索由空格分隔的每个术语。 你可以在这里找到更多相关信息 http://docs.mongodb.org/manual/reference/operator/query/text/#match-any-of-the-search-terms
但是,它仅适用于个别条款。如果您必须搜索不是单个术语的精确短语,例如你想找到"杰克史密斯'但不是"史密斯杰克",它将无法工作,所以你将不得不使用搜索短语。 http://docs.mongodb.org/manual/reference/operator/query/text/#search-for-a-phrase,用于搜索文本中的确切短语。
如果您的应用程序需要更高级的基于文本的搜索功能,可以考虑使用类似Elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/1.3/query-dsl-mlt-field-query.html的内容。
卓然