MongoDB文本搜索在某些单词上无法正常工作

时间:2017-12-13 09:55:38

标签: mongodb search text

我在我的items集合上创建了一个文本索引,如下所示:

db.items.createIndex({"$**":"text"})

执行此搜索:

db.items.find({ "PId" : null, $text : { $search : "Youu" } })

返回此文档:

{
    "_id": ObjectId("59e7494fd28008300c727c73"),
    "_t": "MongoItem",
    "Props": {
        "Identification\Display Name": "Test",
        "Rainfall\Customer Identification\ Internal ": false,
        "Rainfall\ Customer\ Financial Start Date ": NumberLong("77760000000000 "),
        "Rainfall\ Customer\ Error Alarm Threshold ": NumberLong(12),
        "Rainfall\ Customer\ Calculation Start Time ": NumberLong("636188256000000000 "),
        "Rainfall\ Customer\ Time Zone ": 1,
        "Identification\ Description ": "Youu "
    },
    "FId ": BinData(3, "a9Bg/nK2W0W90AKosCJvRw=="),
    "PId": null,
    "FName": "map sewer test",
    "DatUpV": NumberLong(0),
    "DatChV": NumberLong(0),
    "DatUpChV": NumberLong(0),
    "ChItV": NumberLong(0),
    "PropV": NumberLong("636487544940502958")
}

这就是我所期望的。

但是,如果我将Identification \ Description属性更改为“You”并执行此搜索:

db.items.find({ "PId" : null, $text : { $search : "You" } })

我没有得到任何结果!由于我在没有文本部分的情况下进行了搜索并检查了条目,因此该属性肯定已设置为“您”。

我完全不知道为什么这不起作用。有什么想法吗?

由于 伊恩

1 个答案:

答案 0 :(得分:0)

不确定您是否阅读了文档,但此处只是为了确保。

$text 它将在您的所有字段中搜索指定的文本。但它必须完全匹配。

使用您的搜索db.items.find({ "PId" : null, $text : { $search : "You" } }),您只会找到一个文档,其中还有一个值为的字段。 E.g。

{
    "_id": ObjectId("59e7494fd28008300c727c73"),
    "_t": "MongoItem",
    "Props": {
        "Identification\Display Name": "Test",
        "Rainfall\Customer Identification\ Internal ": false,
        "Rainfall\ Customer\ Financial Start Date ": NumberLong("77760000000000 "),
        "Rainfall\ Customer\ Error Alarm Threshold ": NumberLong(12),
        "Rainfall\ Customer\ Calculation Start Time ": NumberLong("636188256000000000 "),
        "Rainfall\ Customer\ Time Zone ": 1,
        "Identification\ Description ": "You "
    },
    "FId ": BinData(3, "a9Bg/nK2W0W90AKosCJvRw=="),
    "PId": null,
    "FName": "map sewer test",
    "DatUpV": NumberLong(0),
    "DatChV": NumberLong(0),
    "DatUpChV": NumberLong(0),
    "ChItV": NumberLong(0),
    "PropV": NumberLong("636487544940502958")
}

您要搜索的内容是$regex。另一方面,使用$regex,您必须搜索特定字段。 如果您想在这种情况下搜索特定字段

“Props.Identification \ Description”

然后你可以像这样搜索:

{ "Props.Identification\\ Description ": {$regex: /you/, $options: 'i'} }

这些选项不是必需的,但是如果你想要特定的选项,你可以添加它们,比如在这种情况下$options: 'i'会使它不区分大小写。 否则你可以这样搜索:

{ "Props.Identification\\ Description ": {$regex: /You/} }