【发布时间】:2020-05-04 07:41:22
【问题描述】:
我基于 Mongo Collection 中的 title 和 main_body 字段创建了一个文本索引。例如,我有一篇标题为“Abby Bengtsson”和她的名字“Abby”的文章,出现在 main_body 的整个实际文章中。
进行文本搜索查询:{$text: {$search: 'abby bengtsson'}},返回所需的文章以及更多文章。
但只是查询她的名字:{$text: {$search: 'abby'}},不会返回任何内容。
我尝试过使用 Mongo Compass、Downloaded Studio 3T,并直接在服务器上使用 ssh 和终端命令。
但我不明白为什么会这样。。其他文章中的其他关键词也是如此。
JSON 文档示例
{
"_id" : ObjectId("5e0f4ded35fbd16f21bf3655"),
"category" : {
"category_id" : "5010",
"slug" : {
"0010" : "profiler",
"0020" : "profiler",
"0030" : "profiler"
},
"label" : {
"0010" : "Profiler",
"0020" : "Profiler",
"0030" : "Profiler"
},
"bg_color" : "#B12CA6",
"txt_color" : "#ffffff",
"main_category_id" : "5000"
},
"featured_image" : {
"main" : "https://img.norrbom.com/article/5e0f4d5e35fbd16f21bf3653/78805a221a988e79ef3f42d7c5bfd418-1578061277668/abby.jpg",
"mobile" : "https://img.norrbom.com/article/5e0f4d5e35fbd16f21bf3653/78805a221a988e79ef3f42d7c5bfd418-1578061277668/abby.jpg",
"square" : "https://img.norrbom.com/article/5e0f4d5e35fbd16f21bf3653/78805a221a988e79ef3f42d7c5bfd418-1578061277668/abby.jpg"
},
"metadata" : {
"title" : "Abby Bengtsson",
"description" : "Hon sprudlar av energi och glädje, vilket smittar av sig på hela redaktionen när hon kliver in hos En Sueco. Med sig har hon sin ursöta följeslagare pomeranianen Melwin",
"og" : {
"title" : "Abby Bengtsson",
"description" : "Hon sprudlar av energi och glädje, vilket smittar av sig på hela redaktionen när hon kliver in hos En Sueco. Med sig har hon sin ursöta följeslagare pomeranianen Melwin",
"image" : "https://img.norrbom.com/article/5e0f4d5e35fbd16f21bf3653/78805a221a988e79ef3f42d7c5bfd418-1578061277668/abby.jpg",
"type" : "article",
"site_name" : "En Sueco",
"url" : "https://www.ensueco.com/profil-abby-bengtsson"
},
"twitter" : {
"title" : "Abby Bengtsson",
"description" : "Hon sprudlar av energi och glädje, vilket smittar av sig på hela redaktionen när hon kliver in hos En Sueco. Med sig har hon sin ursöta följeslagare pomeranianen Melwin",
"card" : "summary",
"image" : "https://img.norrbom.com/article/5e0f4d5e35fbd16f21bf3653/78805a221a988e79ef3f42d7c5bfd418-1578061277668/abby.jpg"
}
},
"tags" : [
],
"title" : "Abby Bengtsson",
"state" : NumberInt(1),
"created" : ISODate("2020-01-01T04:17:00.000+0000"),
"modified" : ISODate("2020-01-01T08:27:54.000+0000"),
"version" : NumberInt(19),
"featured" : false,
"language" : "sv",
"magazines" : [
],
"slug" : "profil-abby-bengtsson",
"published" : ISODate("2020-01-02T10:14:00.000+0000"),
"published_until" : null,
"author_alias" : "Text: Sara Laine, sara@norrbom.com Foto: Mugge Fischer, mugge@norrbom.com",
"main_body" : "... stringified JSON object with article ...",
"article_id" : ObjectId("5e0f4d5e35fbd16f21bf3653"),
"origin" : "cms",
"site" : "0020",
"__v" : NumberInt(0)
}
编辑 18-01-2020
我刚刚测试了一些东西。看来,此问题仅发生在 language 属性设置为 sv(瑞典语,根据 MongoDB Language Documentation)的文档中。如果我将值更改为da(丹麦语),当我搜索“Abby”时,文档将被返回。
我目前已通过将language_overwrite 设置为一个不存在的虚拟字段来解决我的生产问题。现在所有字段都按应有的方式返回。但是瑞典语字段的东西仍然让我感到困惑,因为只有当我将该字段设置为“sv”时 - 拥有多个语言文档以及应该返回和搜索的文本索引有什么意义语言环境,如果它不适用于一种特定的语言变量?
【问题讨论】:
-
试试这个 { $text: {$search: 'abby', $caseSensitive: false}}
-
你是如何创建文本索引的?你能显示添加脚本吗?一些 json 格式的示例文档也会很好。
标签: mongodb indexing full-text-search