由於@Henri指出存在OPA的正則表達式搜索的支持,因爲犯[enhance] DbGen: add case insensitive regex operator =~什麼是非常好的。
記住,它是利用$regex
運營商,而不是全文索引,並可能導致一些性能損失:(由於MongoDB documentation says $正則表達式運算符使用索引在有限的方式 - 只爲前綴搜索:模式^Jean
搜索Jean
在任何地方文本將需要全掃描
就個人而言,我使用蒙戈的full-text index功能,以OPA的「低層次」的API爲$text
命令是這樣的:
function list({float score, Article.id id}) textSearch(string query) {
function onfailure(failure) {
cat.error("textSearch({{~query}}): {failure}");
[];
}
function onsuccess(success) {
function aux(~{name,value}) {
name == "results";
}
match (List.filter(aux, success)) {
| [] :
// `results` field not found - error
onfailure(success);
| results:
cat.debug("textSearch({~{query}}): {results}");
function ({~score, obj: ~{id}}) {
~{score, id}
}
|> List.map(_, Bson.doc2opa(results) ? []);
}
}
opts = [H.str("search", query), H.doc("project", [H.i32("_id",0), H.i32("id",1)])];
// { search: query, project: {_id:0, id:1}, }
// |> Bson.opa2doc
outcome = MongoCommands.simple_str_command_opts(ll_db, db_name, "text", coll_name, opts);
MongoCommon.outcome_map(outcome, onsuccess, onfailure)
}
功能可用在Mongo中,自2.4版開始,作爲實驗版(必須通過特殊配置選項將其打開),並在2.6版中保持穩定(默認打開)。
我不知道任何關於Opa,但這可能會幫助你http://stackoverflow.com/questions/3305561/how-to-query-mongodb-with-like – ccheneson 2014-11-03 15:58:45
謝謝,但我知道如何執行這個查詢與Mongo貝殼。 Opa語言更復雜一點。 – gogson 2014-11-03 16:05:10