繁体   English   中英

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

[英]How can I sort mongodb regex search query results based on regex match count

我不知道如何根据“最佳”匹配对查询结果进行排序。

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

如果我使用“ and”关键字通过正则表达式搜索多个单词,例如:

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

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

我还有什么其他解决方案?

您可以尝试使用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运算符将对每个术语执行逻辑或搜索,并返回包含任何术语的文档。

您必须使用mongodb 2.6

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

@zones = Zone.es.search(
    body: {
      query: {
        bool: {
          should: [
            {match: {city: search}},
            {match: {zipcode: search.to_i}}
          ]
        }
      },
      size: limit
    })

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

带有Selectize插件的ElasticSearch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM