[英]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
})
搜索是通过视图发送的搜索参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.