gpt4 book ai didi

带有确切短语的MongoDB全词搜索未返回预期结果

转载 作者:IT老高 更新时间:2023-10-28 13:22:58 24 4
gpt4 key购买 nike

所以根据 MongoDB 文档,

if a document field contains the word blueberry, a search on the term blue will not match the document

这对我的用例有好处,这是我想要发生的。但是,鉴于以下数据库条目:

> db.test.drop()
> db.test.insert({ "t" : "Men's Fashion" })
> db.test.insert({ "t" : "Women's Fashion" })
> db.test.ensureIndex({ "t" : "text" })

搜索 Men's 返回预期结果:

> db.test.find({ "$text" : { "$search" : "\"Men's\"" } }, { "_id" : 0 })
{ "t" : "Men's Fashion" }

但是搜索整个短语 Men's Fashion,居然还返回 Women's Fashion:

> db.test.find({ "$text" : { "$search" : "\"Men's Fashion\"" } }, { "_id" : 0 })
{ "t" : "Women's Fashion" }
{ "t" : "Men's Fashion" }

我也尝试过 "\"Men's\"\"Fashion\"",结果相同。是否有解决方法/技巧让完整的短语只返回整个单词匹配?

我使用的是 Mongo 2.6.4。有趣的是,它的女性得分确实低于男性。

最佳答案

您看到的结果是因为 woMEN'S FASHION 与 MEN'S FASHION 匹配,因为搜索字符串 在要搜索的字符串中。

此数据集不会发生匹配行为:

/* 1 */
{
"_id" : ObjectId("55ca6060fb286267994d297e"),
"text" : "potato pancake"
}

/* 2 */
{
"_id" : ObjectId("55ca6075fb286267994d297f"),
"text" : "potato salad"
}

/* 3 */
{
"_id" : ObjectId("55ca612ffb286267994d2980"),
"text" : "potato's pancake"
}

用查询

db.getCollection('rudy_test').find({$text : {"$search" : "\"potato pancake\""}})

这是由于条目确实包含整个查询,分数较低是因为它还包含其他文本。您可以使用 Regular Expression Query (即 db.test.find({t : {$regex :/^Men\'s Fashion$/}}))。

关于带有确切短语的MongoDB全词搜索未返回预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31659196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com