1

我想在弹性搜索中搜索。我使用 mongoosastic 作为我的弹性搜索驱动程序。我想搜索一个字符串是否存在于一个字段中,我想再搜索一个字段是否应该完全匹配。我怎么能在 mongoosastic 中做到这一点。

4

1 回答 1

4

您需要的是弹性搜索的布尔查询功能。

我不知道你在这个过程中遇到了什么问题,但我会尝试描述这个过程。

要将模型索引到 Elasticsearch 中,只需添加插件。

var mongoose     = require('mongoose'),
   mongoosastic = require('mongoosastic'),
   Schema       = mongoose.Schema

var User = new Schema({
   name: String,
   country: String,
   age: Number,
   email: String,
   city: String})

User.plugin(mongoosastic)

然后您可以对您的模型执行 ES 搜索,但首先要格式化您的查询。假设您希望每个用户都住在英格兰,而不是伦敦,并且您想匹配 30 到 40 岁之间的用户:

var query = {
    "bool" : {
        "must" : {
            "term" : { "country" : "england" }
        },
        "must_not" : {
            "city" : { "city" : "london" }
        },
        "should" : {
            "range" : {
                "age" : { "from" : 30, "to" : 40}
            }
        }
    }
}

您将获得在年龄上与您的查询不匹配的用户,但 ES 将使用评分系统对结果进行排序。

完成后将您的查询发送到 ES 并处理结果

User.search(query, function (err, users) {
    if (err) {
        //Handle error
    }

    var results = users.hits.hits;

    //work with your hits
}
于 2016-07-19T14:05:15.113 回答