如何根据正则表达式匹配计数对mongodb正则表达式搜索查询结果进行排序

时间:2014-12-01 08:15:14

标签: regex mongodb search

我无法弄清楚如何根据“最佳”匹配对查询结果进行排序。

这是一个简单的例子,我有一个“区域”集合,其中包含城市/邮政编码夫妇列表。

如果我使用“and”关键字在正则表达式中搜索多个单词,请执行以下操作:

"db.zones.find({$or : [ {ville: /ROQUE/}, {ville: /ANTHERON/}] })"

结果不会以“最佳匹配”排序。

我还有其他解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用http://docs.mongodb.org/manual/reference/operator/query/text/#match-any-of-the-search-terms

db.zones.ensureIndex( {  'ville' : 'text' } ,{ score: {$meta:'textScore'}}) 

db.zones.find(
   { $text: { $search: "ROQUE ANTHERON"}},
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

结果:

{
    "_id" : ObjectId("547c2473371ea419f07b954c"),
    "ville" : "ANTHERON",
    "score" : 1.1
}

{
    "_id" : ObjectId("547c246f371ea419f07b954b"),
    "ville" : "ROQUE",
    "score" : 1
}

来自文档

  

如果搜索字符串是以空格分隔的字符串,则为$ text运算符   对每个术语执行逻辑OR搜索并返回文档   包含任何条款。

你必须使用mongodb 2.6

答案 1 :(得分:1)

我最终使用ElasticSearch搜索引擎执行此查询:

protected override void OnPause()
    {
        base.OnPause();
        AndroidEnvironment.UnhandledExceptionRaiser -= OnException_Occured;
    }

搜索是视图发送的搜索参数。

ElasticSearch with Selectize plugin