Mongodb Mongoose Schema.Types.Mixed Text Search

时间:2017-11-10 19:02:30

标签: mongodb mongoose

美好的一天,

需要一些帮助来搞清楚mongodb,mongoose和文本搜索。

我将此作为架构

var itemSchema = new schema({
  itemID: Number,
  description: {type: Schema.Types.Mixed}
}

在mongodb的集合中我有类似的东西

[
 {
    itemID:1
    description: {
        en: "car string in itemid 1"
        fr: "voiture string in itemid 1"
        es: "spanish string in itemid 1"
    }
 },
 {
    itemID:2
    description: {
        en: "motorcycle string in itemid 2"
        fr: "motocyclette string in itemid 2"
        es: "spanish string in itemid 2"
    }
 }
]

我如何进行文字搜索,比如让我说我正在寻找" voiture"在描述中。

是适合此类搜索的Schema.Types.Mixed,或者应该更改。我应该如何索引这样一个字段以获得更好的性能

谢谢

1 个答案:

答案 0 :(得分:0)

你只能拥有one text index per collection,所以不是让一个具有属性作为字符串的对象,而是建议一组具有文本和语言的对象:

description: [
  { lang: "en", text: "car string in itemid 1" }
]

然后你可以创建一个像createIndex({ "description.lang": 1, "description.text": "text" })这样的索引。然后查询query({ "description.lang": "fr", { $text: {$search: "voiture" } })。这假设语言是提前知道的,这将是一个更有效的查询,但您也可以创建没有lang的索引,在这种情况下将搜索所有"description.text"属性。