如何在 Atlas Search 中使用同义词
本教程介绍如何添加将单词配置为同义词的集合、创建在 sample_mflix.movies
集合上定义同义词映射的索引,以及使用配置为同义词的单词针对 title
字段运行 Atlas Search 查询。
本教程将指导用户完成以下步骤:
在
sample_mflix
数据库中加载一个或多个样本同义词源集合。使用
sample_mflix.movies
集合的一个或多个同义词映射创建 Atlas Search 索引。针对同义词源集合中配置为同义词的单词,针对
sample_mflix.movies
集合中的title
字段运行 Atlas Search 查询。
在开始之前,请确保您的 Atlas 集群满足先决条件中所述的要求。
注意
要创建多个同义词映射并运行本教程中的高级示例查询,将需要一个 M10
或更高级别的集群。
要创建 Atlas Search 索引,您必须拥有 Project Data Access Admin
或更高的项目访问权限。
加载样本同义词源集合
同义词源集合中的每个文档都介绍了一个或多个单词如何映射到一个或多个同义词。要详细了解在同义词源集合文档中的字段和映射类型,请参阅同义词源集合文档的格式。
首先,创建同义词源集合,然后将该集合添加到打算使用同义词源集合的数据库中。在本部分中,用户将在 sample_mflix
数据库中创建一两个样本同义词源集合,然后将这些同义词源集合与同一数据库中的 movies
集合的索引一起使用。
在Atlas中,转到项目的Clusters 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未显示,请单击侧边栏中的Clusters 。
显示 集群页面。
GoCollections 页面。
单击集群的对应 Browse Collections 按钮。
显示数据浏览器。
在sample_mflix
数据库中创建一个或多个示例同义词集合。
如果运行的是免费或共享层级集群,请按照运输同义词 标签页中的步骤操作,为索引中的单个同义词映射定义创建集合。如果有 M10
或更高级别的集群并希望在索引中创建多个同义词映射,请按照这两个标签页中的步骤操作,创建 运输同义词 和服装同义词 集合。
展开
sample_mflix
数据库,点击 图标打开 Create Collection 模式。在 Collection name 字段中输入
transport_synonyms
。点击 Create 在
sample_mflix
数据库中创建集合。
展开
sample_mflix
数据库,点击 图标打开 Create Collection 模式。在 Collection name 字段中输入
attire_synonyms
。点击 Create 在
sample_mflix
数据库中创建集合。
将样本数据加载到同义词集合。
按照标签页中的步骤将数据加载到相应的集合中。
如果未选中
transport_synonyms
,则将其选中。单击每个示例文档的 Insert Document 以将其添加到集合中。
单击 JSON 视图 ({}) 替换默认文档。
逐一复制并粘贴以下示例文档,然后单击 Insert,将文档逐一添加到集合。
{ "mappingType": "equivalent", "synonyms": ["car", "vehicle", "automobile"] } { "mappingType": "explicit", "input": ["boat"], "synonyms": ["boat", "vessel", "sail"] }
如果未选中
attire_synonyms
,则将其选中。单击每个示例文档的 Insert Document 以将其添加到集合中。
单击 JSON 视图 ({}) 以替换默认文档。
逐一复制并粘贴以下示例文档,然后单击 Insert,将文档逐一添加到集合。
{ "mappingType": "equivalent", "synonyms": ["dress", "apparel", "attire"] } { "mappingType": "explicit", "input": ["hat"], "synonyms": ["hat", "fedora", "headgear"] }
使用同义词映射定义创建 Atlas Search 索引
集合索引中的同义词映射指定了同义词源集合和用于该集合的分析器。
在本部分中,用户将创建一个 Atlas Search 索引,该索引为 sample_mflix.movies
集合定义一个或多个同义词映射。该索引中的映射定义引用了用户在 sample_mflix
数据库中创建的同义词源集合。
在Atlas中,转到项目的Clusters 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未显示,请单击侧边栏中的Clusters 。
会显示集群页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer 或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击 Services 标题下的 Atlas Search。
从 Select data source 下拉菜单中选择您的集群并单击 Go to Atlas Search。
将显示 Atlas Search 页面。
单击集群的对应 Browse Collections 按钮。
展开数据库并选择集合。
单击该集合的 Search Indexes 标签页。
将显示 Atlas Search 页面。
单击集群的名称。
单击 Atlas Search 标签页。
将显示 Atlas Search 页面。
输入Index Name ,然后设立Database and Collection 。
在 Index Name 字段中输入
synonyms-tutorial
。如果将索引命名为
default
,则在使用 $search 管道阶段时无需指定index
参数。如果您为索引指定了自定义名称,则必须在index
参数中指定此名称。在 Database and Collection(数据库和集合)部分中找到
sample_mflix
数据库,然后选择movies
集合。
修改默认索引定义。
要仅运行简单的样本查询,请使用下面的单同义词映射标签页中的索引定义。如果有 M10
或更高级别的集群,并且加载了两个样本同义词源集合,则可以使用在下面的多个同义词映射标签页中指定多个同义词映射的索引定义来运行简单和高级样本查询。
以下索引定义指定:
语言分析器
lucene.english
作为索引和查询title
字段的默认分析器。名称
transportSynonyms
作为此同义词映射的名称。transport_synonyms
集合作为源同义词集合,用于使用transportSynonyms
映射查找用于查询的同义词。transportSynonyms
可用于对使用lucene.english
分析器编制索引的任何字段(在本示例中包括title
字段)的文本查询。
单击 Next(连接)。
单击 Refine Your Index(连接)。
单击 Field Mappings 部分中的 Add Field。
单击 Customized Configuration(连接)。
在 Add Field Mapping 窗口中配置以下字段,然后点击 Add:
用户界面字段名称配置Field Name输入title
。Enable Dynamic Mapping切换到 Off。Data Type Configuration单击 Add Data Type(连接)。
选择 String 。
对于 Index Analyzer 和 Search Analyzer,点击下拉列表以从 lucene.language 分析器下拉列表中选择 lucene.english。
对于上面未列出的所有其他字段,接受默认值。
单击 Synonym Mappings 部分中的 Add Synonym Mapping。
在 Add Synonym Mapping 窗口中配置以下字段,然后点击 Add:
用户界面字段名称配置Synonym Mapping Name输入transportSynonyms
。Synonym Source Collection选择transport_synonyms
。Analyzer选择lucene.english
。单击 Save Changes(连接)。
将默认索引定义替换为以下索引定义。
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "lucene.english", "type": "string" } } }, "synonyms": [ { "analyzer": "lucene.english", "name": "transportSynonyms", "source": { "collection": "transport_synonyms" } } ] } 单击 Next(连接)。
以下索引定义指定:
语言分析器
lucene.standard
作为索引和查询title
字段的默认分析器。名称
transportSynonyms
和attireSynonyms
作为同义词映射的名称。transport_synonyms
集合作为源同义词集合,用于使用transportSynonyms
映射查找用于查询的同义词。transportSynonyms
可用于对使用lucene.standard
分析器编制索引的任何字段(在本教程的此示例查询中包括title
字段)的文本查询。attire_synonyms
集合作为源同义词集合,用于使用attireSynonyms
映射查找用于查询的同义词。attireSynonyms
可用于对使用lucene.standard
分析器编制索引的任何字段(在本示例中包括title
字段)的文本查询。
单击 Next(连接)。
单击 Refine Your Index(连接)。
单击 Field Mappings 部分中的 Add Field。
在 Add Field Mapping 窗口中配置以下字段,然后点击 Add:
用户界面字段名称配置Field Name输入title
。Enable Dynamic Mapping切换到 Off。Data Type Configuration选择 String 。
对于 Index Analyzer 和 Search Analyzer,点击下拉列表以从 lucene.language 分析器下拉列表中选择 lucene.english。
对于上面未列出的所有其他字段,接受默认值。
单击 Synonym Mappings 部分中的 Add Synonym Mapping。
在 Add Synonym Mapping 窗口中配置以下字段,然后点击 Add:
用户界面字段名称配置Synonym Mapping Name输入transportSynonyms
。Synonym Source Collection选择transport_synonyms
。Analyzer选择lucene.english
。在 Synonym Mappings 部分中再次单击 Add Synonym Mapping。
在 Add Synonym Mapping 窗口中配置以下字段,然后点击 Add:
用户界面字段名称配置Synonym Mapping Name输入attireSynonyms
。Synonym Source Collection选择attire_synonyms
。Analyzer选择lucene.english
。单击 Save Changes(连接)。
将默认索引定义替换为以下索引定义。
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "lucene.english", "type": "string" } } }, "synonyms": [ { "analyzer": "lucene.english", "name": "transportSynonyms", "source": { "collection": "transport_synonyms" } }, { "analyzer": "lucene.english", "name": "attireSynonyms", "source": { "collection": "attire_synonyms" } } ] } 单击 Next(连接)。
搜索集合
➤ 使用选择语言下拉菜单设置本节中示例的语言。
同义词只能在使用 text 操作符的查询中使用。在本部分中,用户将连接到 Atlas 集群,然后使用 text
操作符针对 sample_mflix.movies
集合中的 title
字段运行样本查询。样本查询使用配置为同义词源集合中不同映射类型的同义词的单词。查询使用的同义词映射中引用了该源集合。
在Atlas中,转到项目的Clusters 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未显示,请单击侧边栏中的Clusters 。
会显示集群页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer 或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击 Services 标题下的 Atlas Search。
从 Select data source 下拉菜单中选择您的集群并单击 Go to Atlas Search。
将显示 Atlas Search 页面。
单击集群的对应 Browse Collections 按钮。
展开数据库并选择集合。
单击该集合的 Search Indexes 标签页。
将显示 Atlas Search 页面。
单击集群的名称。
单击 Atlas Search 标签页。
将显示 Atlas Search 页面。
movies
对 集合运行以下示例查询。
如果使用单个同义词映射定义创建了索引,从以下简单示例标签页运行查询。如果在索引中定义多个同义词映射,则可以从以下两个标签页运行查询。
以下查询:
排除
title
字段之外的所有字段。添加名为
score
的字段。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
以下查询在 title
字段中搜索 automobile
,并使用 transportSynonyms
同义词映射定义来搜索您在 transport_synonyms
同义词源集合中配置的 automobile
的同义词。
[ { $search: { index: "synonyms-tutorial", text: { path: "title", query: "automobile", synonyms: "transportSynonyms" } } } ]
SCORE: 4.197734832763672 _id: “573a13a9f29313caabd1f18a” fullplot: "While traveling to California for the dispute of the final race of the…" imdb: Object year: 2006 ... title: "Cars" SCORE: 3.8511905670166016 _id: “573a1398f29313caabcea94c” plot: "A man must struggle to travel home for Thanksgiving with an obnoxious …" genres: Array runtime: 93 ... title: "Planes, Trains, and Automobiles" SCORE: 3.39473032951355 _id: “573a1397f29313caabce5fb0” plot: "Car Wash is about a close-knit group of employees who one day have all…" genres: Array runtime: 97 ... title: "Car Wash" SCORE: 3.39473032951355 _id: “573a1397f29313caabce7bd2” plot: "When the owner of a struggling used car lot is killed, it's up to the …" genres: Array runtime: 113 ... title: "Used Cars" SCORE: 3.39473032951355 _id: “573a13a6f29313caabd18bfe” fullplot: "Gifted 18-year-old Meg has been abandoned by her father and neglected …" imdb: Object year: 2002 ... title: "Blue Car" SCORE: 3.39473032951355 _id: “573a13c1f29313caabd64e3d” fullplot: "After Mater gets his best friend, star race car Lightning McQueen, a s…" imdb: Object year: 2011 ... title: "Cars 2" SCORE: 3.39473032951355 _id: “573a13eaf29313caabdce62c” plot: "A rebellious teenager navigates his way through the juvenile court sys…" genres: Array runtime: 94 ... title: "Stealing Cars" SCORE: 3.39473032951355 _id: “573a13f1f29313caabddc93f” plot: "A small town sheriff sets out to find the two kids who have taken his …" genres: Array runtime: 86 ... title: "Cop Car" SCORE: 2.8496146202087402 _id: “573a1396f29313caabce5480” plot: "The small town of Paris, Australia deliberately causes car accidents, …" genres: Array runtime: 91 ... title: "The Cars That Eat People" SCORE: 2.8496146202087402 _id: “573a139df29313caabcf9636” plot: "Military doctor General Klenski is arrested in Stalin's Russia in 1953…" genres: Array runtime: 137 ... title: "Khrustalyov, My Car!"
Atlas Search 结果包含在 title
字段中带有 car
和 automobile
的电影,尽管查询术语是 automobile
,因为我们在名为 sample_synonyms
的同义词来源集合中将 automobile
配置为 car
、vehicle
和 automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词 car
和 vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的 query
字段的值替换为 car
或 vehicle
,然后运行查询。
以下查询在 title
字段中搜索 boat
,并使用 transportSynonyms
同义词映射定义来搜索您在 transport_synonyms
同义词源集合中配置的 boat
的同义词。
[ { $search: { index: "synonyms-tutorial", text: { path: "title", query: "boat", synonyms: "transportSynonyms" } } } ]
SCORE: 5.373150825500488 _id: “573a13e9f29313caabdcd013” plot: "A fearless sea captain sails a ship through loopholes in international…" genres: Array runtime: 90 ... title: "Vessel" SCORE: 4.589139938354492 _id: “573a13e8f29313caabdc9e72” countries: Array genres: Array runtime: 7 ... title: "Boats" SCORE: 4.3452959060668945 _id: “573a1398f29313caabce90b6” plot: "In 1914, a luxury ship leaves Italy in order to scatter the ashes of a…" genres: Array runtime: 128 ... title: "And the Ship Sails On" SCORE: 4.3452959060668945 _id: “573a139cf29313caabcf7c75” plot: "A young Pennsylvania man moves to Los Angeles to begin work for an amb…" genres: Array runtime: 90 ... title: "Broken Vessels" SCORE: 4.3452959060668945 _id: “573a13f0f29313caabdda2dd” plot: "A young man struggling with the death of his parents meets an extrover…" genres: Array runtime: 80 ... title: "Sailing to Paradise" SCORE: 3.711261749267578 _id: “573a1397f29313caabce8796” plot: "A Japanese photojournalist revisits Vietnam after the Liberation and l…" genres: Array runtime: 109 ... title: "Boat People" SCORE: 3.711261749267578 _id: “573a13a6f29313caabd17a98” plot: "Two straight men mistakenly end up on a "gays only" cruise." genres: Array runtime: 94 ... title: "Boat Trip" SCORE: 3.1153182983398438 _id: “573a1394f29313caabce036c” plot: "Three London gentlemen take vacation rowing down the Thames, encounter…" genres: Array runtime: 84 ... title: "Three Men in a Boat" SCORE: 3.1153182983398438 _id: “573a1395f29313caabce2c28” plot: "After a series of misunderstandings, the head of an aerospace research…" genres: Array runtime: 110 ... title: "The Glass Bottom Boat" SCORE: 3.1153182983398438 _id: “573a13c2f29313caabd68772” fullplot: "Jack is a shy and awkward man who drives a limo and lives an unassumin…" imdb: Object runtime: 2010 ... title: "Jack Goes Boating"
Atlas Search 搜索结果包含 title
字段中具有 boat
、 vessel
和 sail
的电影,因为我们在名为 sample_synonyms
的同义词源集合中将 boat
、 vessel
和 sail
配置为boat
的同义词,该集合在集合的索引中指定。
Atlas Search 仅在结果中搜索单词 vessel
时返回以下文档
{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 }
Atlas Search 不包括结果中 title
字段中带有 boat
或 sail
的文档,因为我们没有将 vessel
配置为同义词源集合中 boat
或 sail
的同义词。要对此进行测试,将上面查询中的 query
字段的值替换为 vessel
,然后再次运行查询。
同样,Atlas Search 仅在搜索词 sail
的结果中返回以下文档:
{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 }
Atlas Search 不包括结果中 title
字段中带有 boat
或 vessel
的文档,因为我们没有将 sail
配置为同义词源集合中 boat
或 vessel
的同义词。要测试此示例,请将上述查询中 query
字段的值替换为 sail
,然后再次运行查询。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
以下查询在 title
字段中搜索 automobile
,并使用 transportSynonyms
同义词映射定义来搜索您在 transport_synonyms
同义词源集合中配置的 automobile
的同义词。此外,该查询还会在 title
字段中搜索 attire
,并使用 attireSynonyms
同义词映射定义来搜索您在 attire_synonyms
同义词源集合中配置的 attire
的同义词。
[ { $search: { "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "attire", "synonyms": "attireSynonyms" } }] } } } ]
SCORE: 4.812004089355469 _id: “573a139af29313caabcf003f” plot: "The Dress is a tale filled with sex, violence, comedy and drama as it …" genres: Array runtime: 103 ... title: "The Dress" SCORE: 4.197734832763672 _id: “573a13a9f29313caabd1f18a” fullplot: "While traveling to California for the dispute of the final race of the…" imdb: Object year: 2006 ... title: "Cars" SCORE: 3.891493320465088 _id: “573a1397f29313caabce77cd” plot: "A mysterious blonde woman kills one of a psychiatrist's patients, and …" genres: Array runtime: 105 ... title: "Dressed to Kill" SCORE: 3.891493320465088 _id: “573a13bcf29313caabd57e07” fullplot: "Two things about Jane: she never says no to her friends (she's been a …" imdb Object year: 2008 ... title: "27 Dresses" SCORE: 3.8511905670166016 _id: “573a1398f29313caabcea94c” plot: "A man must struggle to travel home for Thanksgiving with an obnoxious …" genres: Array runtime: 93 ... title: "Planes, Trains, and Automobiles" SCORE: 3.39473032951355 _id: “573a1397f29313caabce5fb0” plot: "Car Wash is about a close-knit group of employees who one day have all…" genres: Array runtime: 97 ... title: "Car Wash" SCORE: 3.39473032951355 _id: “573a1397f29313caabce7bd2” plot: "When the owner of a struggling used car lot is killed, it's up to the …" genres: Array runtime: 113 ... title: "Used Cars" SCORE: 3.39473032951355 _id: “573a13a6f29313caabd18bfe” fullplot: "Gifted 18-year-old Meg has been abandoned by her father and neglected …" imdb: Object year: 2002 ... title: "Blue Car" SCORE: 3.39473032951355 _id: “573a13c1f29313caabd64e3d” fullplot: "After Mater gets his best friend, star race car Lightning McQueen, a s…" imdb: Object year: 2011 ... title: "Cars 2" SCORE: 3.39473032951355 _id: “573a13eaf29313caabdce62c” plot: "A rebellious teenager navigates his way through the juvenile court sys…" genres: Array runtime: 94 ... title: "Stealing Cars"
Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语 automobile
的 title
字段中带有 car
的电影,因为我们将 automobile
配置为名为car
、vehicle
和 automobile
的同义词源集合中的同义词 transport_synonyms
。结果还包含查询术语 attire
的标题字段中带有 dress
的电影,因为我们将 attire
配置为名为 attire_synonyms
的同义词源集合中的dress
、apparel
和 attire
的同义词。
Atlas Search 在 transport_synonyms
源集合中搜索 car
或 vehicle
以及在 attire_synonyms
源集合中搜索 dress
或 apparel
会返回相同的结果。要测试此示例,将上述查询中 query
字段的值替换为 car
或 vehicle
,并将上述查询中 query
字段的值替换为 dress
或 apparel
,然后再次运行查询。
以下查询在 title
字段中搜索 boat
,并使用 transportSynonyms
同义词映射定义来搜索您在 transport_synonyms
同义词源集合中配置的 boat
的同义词。此外,该查询还会在 title
字段中搜索 hat
,并使用 attireSynonyms
同义词映射定义来搜索您在 attire_synonyms
同义词源集合中配置的 hat
的同义词。
[ { $search: { index: "synonyms-tutorial", compound: { should: [{ text: { path: "title", query: "boat", synonyms: "transportSynonyms" } }, { text: { path: "title", query: "hat", synonyms: "attireSynonyms" } }] } } } ]
SCORE: 5.673145294189453 _id: “573a1397f29313caabce6bed” plot: "Down-on-his-luck Hollywood producer Barry 'Dutch' Detweiler attempts t…" genres: Array runtime: 114 ... title: "Fedora" SCORE: 5.373150825500488 _id: “573a13e9f29313caabdcd013” plot: "A fearless sea captain sails a ship through loopholes in international…" genres: Array runtime: 90 ... title: "Vessel" SCORE: 4.589139938354492 _id: “573a13e8f29313caabdc9e72” countries: Array genres: Array runtime: 7 ... title: "Boats" SCORE: 4.3452959060668945 _id: “573a1398f29313caabce90b6” plot: "In 1914, a luxury ship leaves Italy in order to scatter the ashes of a…" genres: Array runtime: 128 ... title: "And the Ship Sails On" SCORE: 4.3452959060668945 _id: “573a139cf29313caabcf7c75” plot: "A young Pennsylvania man moves to Los Angeles to begin work for an amb…" genres: Array runtime: 90 ... title: "Broken Vessels" SCORE: 4.3452959060668945 _id: “573a13f0f29313caabdda2dd” plot: "A young man struggling with the death of his parents meets an extrover…" genres: Array runtime: 80 ... title: "Sailing to Paradise" SCORE: 4.066137313842773 _id: “573a1392f29313caabcdaae8” plot: "An American dancer comes to Britain and falls for a model whom he init…" genres: Array runtime: 101 ... title: "Top Hat" SCORE: 4.066137313842773 _id: “573a1394f29313caabce05e8” plot: "A Korean War veteran's morphine addiction wreaks havoc upon his family…" genres: Array runtime: 109 ... title: "A Hatful of Rain" SCORE: 3.711261749267578 _id: “573a1397f29313caabce8796” plot: "A Japanese photojournalist revisits Vietnam after the Liberation and l…" genres: Array runtime: 109 ... title: "Boat People" SCORE: 3.711261749267578 _id: “573a13a6f29313caabd17a98” plot: "Two straight men mistakenly end up on a "gays only" cruise." genres: Array runtime: 94 ... title: "Boat Trip"
Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语 boat
的 title
字段中带有 vessel
、boat
和 sail
的电影,因为我们将 boat
配置为名为 transport_synonyms
的同义词源集合中的 boat
、vessel
和 sail
的同义词。
Atlas Search 不包括搜索结果中 title
字段中带有 boat
或 sail
的文档 vessel
,因为我们没有将 vessel
配置为同义词来源集合中 boat
或 sail
的同义词。同样,Atlas Search 不会在搜索词 sail
的结果中包含 title
字段中包含 boat
或 vessel
的文档,因为我们没有将 sail
配置为同义词源集合中的 boat
或 vessel
。要测试这些示例,请将上述查询中 query
字段的值替换为 vessel
或 sail
,然后再次运行查询。
结果还包含查询词 hat
的标题字段中带有 fedora
和 hat
的电影,因为我们将 hat
配置为名为 attire_synonyms
的同义词源集合中的 hat
、fedora
和 headgear
的同义词。
Atlas Search 不包括搜索结果中 title
字段中带有 hat
或 fedora
的文档 headgear
,因为我们没有将 headgear
配置为同义词来源集合中 hat
或 fedora
的同义词。同样,Atlas Search 不会在搜索词 fedora
的结果中包含 title
字段中包含 hat
或 headgear
的文档,因为我们没有将 fedora
配置为同义词源集合中的 hat
或 headgear
。要测试这些示例,请将上述查询中 query
字段的值替换为 fedora
或 headgear
,然后再次运行查询。
展开查询结果。
Search Tester 可能不会显示其所返回文档的所有字段。要查看所有字段,包括在查询路径中指定的字段,请展开结果中的文档。
连接到mongosh
中的集群。
在终端窗口中打开mongosh
并连接到集群。 有关连接的详细说明,请参阅通过mongosh
连接。
使用sample_mflix
数据库。
在 mongosh
提示符下运行以下命令:
use sample_mflix
movies
对 集合运行以下示例查询。
如果使用单个同义词映射定义创建了索引,请从以下简单示例标签页运行查询。如果在索引中定义多个同义词映射,则可以从以下两个标签页运行查询。
这些查询使用了下列管道阶段:
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
该查询还会在 title
字段中搜索单词 automobile
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 automobile
的同义词的单词。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
{ "title" : "Cars", "score" : 4.197734832763672 } { "title" : "Planes, Trains & Automobiles", "score" : 3.8511905670166016 } { "title" : "Car Wash", "score" : 3.39473032951355 } { "title" : "Used Cars", "score" : 3.39473032951355 } { "title" : "Blue Car", "score" : 3.39473032951355 } { "title" : "Cars 2", "score" : 3.39473032951355 } { "title" : "Stealing Cars", "score" : 3.39473032951355 } { "title" : "Cop Car", "score" : 3.39473032951355 } { "title" : "The Cars That Eat People", "score" : 2.8496146202087402 } { "title" : "Khrustalyov, My Car!", "score" : 2.8496146202087402 }
Atlas Search 结果包含在 title
字段中带有 car
和 automobile
的电影,尽管查询术语是 automobile
,因为我们在名为 sample_synonyms
的同义词来源集合中将 automobile
配置为 car
、vehicle
和 automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词 car
和 vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的 query
字段的值替换为 car
或 vehicle
,然后运行查询。
该查询还会在 title
字段中搜索单词 boat
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 boat
的同义词的单词。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Boats", "score" : 4.589139938354492 } { "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } { "title" : "Boat People", "score" : 3.711261749267578 } { "title" : "Boat Trip", "score" : 3.711261749267578 } { "title" : "Three Men in a Boat", "score" : 3.1153182983398438 } { "title" : "The Glass Bottom Boat", "score" : 3.1153182983398438 } { "title" : "Jack Goes Boating", "score" : 3.1153182983398438 }
Atlas Search 搜索结果包含 title
字段中具有 boat
、 vessel
和 sail
的电影,因为我们在名为 sample_synonyms
的同义词源集合中将 boat
、 vessel
和 sail
配置为boat
的同义词,该集合在集合的索引中指定。
Atlas Search 仅在结果中搜索单词 vessel
时返回以下文档
{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 }
Atlas Search 不包括结果中 title
字段中带有 boat
或 sail
的文档,因为我们没有将 vessel
配置为同义词源集合中 boat
或 sail
的同义词。要对此进行测试,将上面查询中的 query
字段的值替换为 vessel
,然后再次运行查询。
同样,Atlas Search 仅在搜索词 sail
的结果中返回以下文档:
{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 }
Atlas Search 不包括结果中 title
字段中带有 boat
或 vessel
的文档,因为我们没有将 sail
配置为同义词源集合中 boat
或 vessel
的同义词。要测试此示例,请将上述查询中 query
字段的值替换为 sail
,然后再次运行查询。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
该查询还会在 title
字段中搜索单词 automobile
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 automobile
的同义词的单词。该查询还会在 title
字段中搜索单词 attire
,并使用名为 attireSynonyms
的同义词映射定义在名为 attire_synonyms
的同义词源集合中搜索配置为查询单词 attire
的同义词的单词。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "attire", "synonyms": "attireSynonyms" } }] } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
[ { title: 'The Dress', score: 4.812004089355469 }, { title: 'Cars', score: 4.197734832763672 }, { title: 'Dressed to Kill', score: 3.891493320465088 }, { title: '27 Dresses', score: 3.891493320465088 }, { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 }, { title: 'Car Wash', score: 3.39473032951355 }, { title: 'Used Cars', score: 3.39473032951355 }, { title: 'Blue Car', score: 3.39473032951355 }, { title: 'Cars 2', score: 3.39473032951355 }, { title: 'Stealing Cars', score: 3.39473032951355 } ]
Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语 automobile
的 title
字段中带有 car
的电影,因为我们将 automobile
配置为名为car
、vehicle
和 automobile
的同义词源集合中的同义词 transport_synonyms
。结果还包含查询术语 attire
的标题字段中带有 dress
的电影,因为我们将 attire
配置为名为 attire_synonyms
的同义词源集合中的dress
、apparel
和 attire
的同义词。
Atlas Search 在 transport_synonyms
源集合中搜索 car
或 vehicle
以及在 attire_synonyms
源集合中搜索 dress
或 apparel
会返回相同的结果。要测试此示例,将上述查询中 query
字段的值替换为 car
或 vehicle
,并将上述查询中 query
字段的值替换为 dress
或 apparel
,然后再次运行查询。
该查询还会在 title
字段中搜索单词 boat
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 boat
的同义词的单词。该查询还会在 title
字段中搜索单词 hat
,并使用名为 attireSynonyms
的同义词映射定义在名为 attire_synonyms
的同义词源集合中搜索配置为查询单词 hat
的同义词的单词。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "hat", "synonyms": "attireSynonyms" } }] } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
[ { title: 'Fedora', score: 5.673145294189453 }, { title: 'Vessel', score: 5.373150825500488 }, { title: 'Boats', score: 4.589139938354492 }, { title: 'And the Ship Sails On', score: 4.3452959060668945 }, { title: 'Broken Vessels', score: 4.3452959060668945 }, { title: 'Sailing to Paradise', score: 4.3452959060668945 }, { title: 'Top Hat', score: 4.066137313842773 }, { title: 'A Hatful of Rain', score: 4.066137313842773 }, { title: 'Boat People', score: 3.711261749267578 }, { title: 'Boat Trip', score: 3.711261749267578 } ]
Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语 boat
的 title
字段中带有 vessel
、boat
和 sail
的电影,因为我们将 boat
配置为名为 transport_synonyms
的同义词源集合中的 boat
、vessel
和 sail
的同义词。
Atlas Search 不包括搜索结果中 title
字段中带有 boat
或 sail
的文档 vessel
,因为我们没有将 vessel
配置为同义词来源集合中 boat
或 sail
的同义词。同样,Atlas Search 不会在搜索词 sail
的结果中包含 title
字段中包含 boat
或 vessel
的文档,因为我们没有将 sail
配置为同义词源集合中的 boat
或 vessel
。要测试这些示例,请将上述查询中 query
字段的值替换为 vessel
或 sail
,然后再次运行查询。
结果还包含查询词 hat
的标题字段中带有 fedora
和 hat
的电影,因为我们将 hat
配置为名为 attire_synonyms
的同义词源集合中的 hat
、fedora
和 headgear
的同义词。
Atlas Search 不包括搜索结果中 title
字段中带有 hat
或 fedora
的文档 headgear
,因为我们没有将 headgear
配置为同义词来源集合中 hat
或 fedora
的同义词。同样,Atlas Search 不会在搜索词 fedora
的结果中包含 title
字段中包含 hat
或 headgear
的文档,因为我们没有将 fedora
配置为同义词源集合中的 hat
或 headgear
。要测试这些示例,请将上述查询中 query
字段的值替换为 fedora
或 headgear
,然后再次运行查询。
在 MongoDB Compass 中连接到您的集群。
打开 MongoDB Compass 并连接到您的集群。有关连接的详细说明,请参阅通过 Compass 连接。
对 集合运行简单的Atlas Search查询。movies
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
该查询还会在 title
字段中搜索单词 automobile
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 automobile
同义词的单词。查询包括以下阶段:
若要在 MongoDB Compass 中运行此查询:
单击 Aggregations 标签页。
单击 Select...,然后从下拉菜单中选择阶段并为该阶段添加查询,以配置以下每个管道阶段。单击 Add Stage 以添加其他阶段。
管道阶段查询$search
{ "index": "synonyms-tutorial", "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } 如果已启用 Auto Preview,则 MongoDB Compass 将在
$project
管道阶段旁边显示以下文档:{title Cars} {score 4.197734832763672} {title Planes, Trains & Automobiles} {score 3.8511905670166016} {title Car Wash} {score 3.39473032951355} {title Used Cars} {score 3.39473032951355} {title Blue Car} {score 3.39473032951355} {title Cars 2} {score 3.39473032951355} {title Stealing Cars} {score 3.39473032951355} {title Cop Car} {score 3.39473032951355} {title The Cars That Eat People} {score 2.8496146202087402} {title Khrustalyov, My Car!} {score 2.8496146202087402} Atlas Search 结果包含在
title
字段中带有car
和automobile
的电影,尽管查询术语是automobile
,因为我们在名为sample_synonyms
的同义词来源集合中将automobile
配置为car
、vehicle
和automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词car
和vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的query
字段的值替换为car
或vehicle
,然后运行查询。
该查询还会在 title
字段中搜索单词 boat
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 boat
同义词的单词。它包括以下阶段:
若要在 MongoDB Compass 中运行此查询:
单击 Aggregations 标签页。
单击 Select...,然后从下拉菜单中选择阶段并为该阶段添加查询,以配置以下每个管道阶段。单击 Add Stage 以添加其他阶段。
管道阶段查询$search
{ "index": "synonyms-tutorial", "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } 如果已启用 Auto Preview,则 MongoDB Compass 将在
$project
管道阶段旁边显示以下文档:{title Vessel} {score 5.373150825500488} {title Boats} {score 4.589139938354492} {title And the Ship Sails On} {score 4.3452959060668945} {title Broken Vessels} {score 4.3452959060668945} {title Sailing to Paradise} {score 4.3452959060668945} {title Boat People} {score 3.711261749267578} {title Boat Trip} {score 3.711261749267578} {title Three Men in a Boat} {score 3.1153182983398438} {title The Glass Bottom Boat} {score 3.1153182983398438} {title Jack Goes Boating} {score 3.1153182983398438} Atlas Search 搜索结果包含
title
字段中具有boat
、vessel
和sail
的电影,因为我们在名为sample_synonyms
的同义词源集合中将boat
、vessel
和sail
配置为boat
的同义词,该集合在集合的索引中指定。Atlas Search 仅在结果中搜索单词
vessel
时返回以下文档{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或sail
的文档,因为我们没有将vessel
配置为同义词源集合中boat
或sail
的同义词。要对此进行测试,将上面查询中的query
字段的值替换为vessel
,然后再次运行查询。同样,Atlas Search 仅在搜索词
sail
的结果中返回以下文档:{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中boat
或vessel
的同义词。要测试此示例,请将上述查询中query
字段的值替换为sail
,然后再次运行查询。
如果创建的索引包含多个同义词映射,则运行高级 Atlas Search 查询。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
该查询还会在 title
字段中搜索单词 automobile
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 automobile
的同义词的单词。该查询还会在 title
字段中搜索单词 attire
,并使用名为 attireSynonyms
的同义词映射定义在名为 attire_synonyms
的同义词源集合中搜索配置为查询单词 attire
的同义词的单词。
查询包括以下阶段:
若要在 MongoDB Compass 中运行此查询:
单击 Aggregations 标签页。
单击 Select...,然后从下拉菜单中选择阶段并为该阶段添加查询,以配置以下每个管道阶段。单击 Add Stage 以添加其他阶段。
管道阶段查询$search
{ "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "attire", "synonyms": "attireSynonyms" } }] } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } 如果已启用 Auto Preview,则 MongoDB Compass 将在
$project
管道阶段旁边显示以下文档:{ title: 'The Dress', score: 4.812004089355469 }, { title: 'Cars', score: 4.197734832763672 }, { title: 'Dressed to Kill', score: 3.891493320465088 }, { title: '27 Dresses', score: 3.891493320465088 }, { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 }, { title: 'Car Wash', score: 3.39473032951355 }, { title: 'Used Cars', score: 3.39473032951355 }, { title: 'Blue Car', score: 3.39473032951355 }, { title: 'Cars 2', score: 3.39473032951355 }, { title: 'Stealing Cars', score: 3.39473032951355 } Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
automobile
的title
字段中带有car
的电影,因为我们将automobile
配置为名为car
、vehicle
和automobile
的同义词源集合中的同义词transport_synonyms
。结果还包含查询术语attire
的标题字段中带有dress
的电影,因为我们将attire
配置为名为attire_synonyms
的同义词源集合中的dress
、apparel
和attire
的同义词。Atlas Search 在
transport_synonyms
源集合中搜索car
或vehicle
以及在attire_synonyms
源集合中搜索dress
或apparel
会返回相同的结果。要测试此示例,将上述查询中query
字段的值替换为car
或vehicle
,并将上述查询中query
字段的值替换为dress
或apparel
,然后再次运行查询。
该查询还会在 title
字段中搜索单词 boat
,并使用名为 transportSynonyms
的同义词映射定义在名为 transport_synonyms
的同义词源集合中搜索配置为查询单词 boat
的同义词的单词。该查询还会在 title
字段中搜索单词 hat
,并使用名为 attireSynonyms
的同义词映射定义在名为 attire_synonyms
的同义词源集合中搜索配置为查询单词 hat
的同义词的单词。
查询包括以下阶段:
若要在 MongoDB Compass 中运行此查询:
单击 Aggregations 标签页。
单击 Select...,然后从下拉菜单中选择阶段并为该阶段添加查询,以配置以下每个管道阶段。单击 Add Stage 以添加其他阶段。
管道阶段查询$search
{ "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "hat", "synonyms": "attireSynonyms" } }] } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } 如果已启用 Auto Preview,则 MongoDB Compass 将在
$project
管道阶段旁边显示以下文档:{ title: 'Fedora', score: 5.673145294189453 }, { title: 'Vessel', score: 5.373150825500488 }, { title: 'Boats', score: 4.589139938354492 }, { title: 'And the Ship Sails On', score: 4. 3452959060668945 }, { title: 'Broken Vessels', score: 4.3452959060668945 }, { title: 'Sailing to Paradise', score: 4.3452959060668945 }, { title: 'Top Hat', score: 4.066137313842773 }, { title: 'A Hatful of Rain', score: 4.066137313842773 }, { title: 'Boat People', score: 3.711261749267578 }, { title: 'Boat Trip', score: 3.711261749267578 } Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
boat
的title
字段中带有vessel
、boat
和sail
的电影,因为我们将boat
配置为名为transport_synonyms
的同义词源集合中的boat
、vessel
和sail
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有boat
或sail
的文档vessel
,因为我们没有将vessel
配置为同义词来源集合中boat
或sail
的同义词。同样,Atlas Search 不会在搜索词sail
的结果中包含title
字段中包含boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中的boat
或vessel
。要测试这些示例,请将上述查询中query
字段的值替换为vessel
或sail
,然后再次运行查询。结果还包含查询词
hat
的标题字段中带有fedora
和hat
的电影,因为我们将hat
配置为名为attire_synonyms
的同义词源集合中的hat
、fedora
和headgear
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有hat
或fedora
的文档headgear
,因为我们没有将headgear
配置为同义词来源集合中hat
或fedora
的同义词。同样,Atlas Search 不会在搜索词fedora
的结果中包含title
字段中包含hat
或headgear
的文档,因为我们没有将fedora
配置为同义词源集合中的hat
或headgear
。要测试这些示例,请将上述查询中query
字段的值替换为fedora
或headgear
,然后再次运行查询。
对 集合运行简单的Atlas Search查询。movies
这些代码示例执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
synonyms-equivalent-query.go
的文件。将代码示例复制并粘贴到
synonyms-equivalent-query.go
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.D{{"index", "synonyms-tutorial"}, {"text", bson.D{{"path", "title"}, {"query", "automobile"}, {"synonyms", "transportSynonyms"}}}}}} 31 limitStage := bson.D{{"$limit", 10}} 32 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 33 // specify the amount of time the operation can run on the server 34 opts := options.Aggregate().SetMaxTime(5 * time.Second) 35 // run pipeline 36 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 37 if err != nil { 38 panic(err) 39 } 40 // print results 41 var results []bson.D 42 if err = cursor.All(context.TODO(), &results); err != nil { 43 panic(err) 44 } 45 for _, result := range results { 46 fmt.Println(result) 47 } 48 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行以下命令来查询您的集合:
go run synonyms-equivalent-query.go 当您运行
synonyms-equivalent-query.go
时,程序会将以下文档打印到您的终端:[{title Cars} {score 4.197734832763672}] [{title Planes, Trains & Automobiles} {score 3.8511905670166016}] [{title Car Wash} {score 3.39473032951355}] [{title Used Cars} {score 3.39473032951355}] [{title Blue Car} {score 3.39473032951355}] [{title Cars 2} {score 3.39473032951355}] [{title Stealing Cars} {score 3.39473032951355}] [{title Cop Car} {score 3.39473032951355}] [{title The Cars That Eat People} {score 2.8496146202087402}] [{title Khrustalyov, My Car!} {score 2.8496146202087402}] Atlas Search 结果包含在
title
字段中带有car
和automobile
的电影,尽管查询术语是automobile
,因为我们在名为sample_synonyms
的同义词来源集合中将automobile
配置为car
、vehicle
和automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词car
和vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的query
字段的值替换为car
或vehicle
,然后运行查询。
创建一个名为
synonyms-explicit-query.go
的文件。将代码示例复制并粘贴到
synonyms-explicit-query.go
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.D{{"text", bson.D{{"index", "synonyms-tutorial"}, {"path", "title"}, {"query", "boat"}, {"synonyms", "transportSynonyms"}}}}}} 31 limitStage := bson.D{{"$limit", 10}} 32 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 33 // specify the amount of time the operation can run on the server 34 opts := options.Aggregate().SetMaxTime(5 * time.Second) 35 // run pipeline 36 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 37 if err != nil { 38 panic(err) 39 } 40 // print results 41 var results []bson.D 42 if err = cursor.All(context.TODO(), &results); err != nil { 43 panic(err) 44 } 45 for _, result := range results { 46 fmt.Println(result) 47 } 48 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行以下命令来查询您的集合:
go run synonyms-explicit-query.go [{title Vessel} {score 5.373150825500488}] [{title Boats} {score 4.589139938354492}] [{title And the Ship Sails On} {score 4.3452959060668945}] [{title Broken Vessels} {score 4.3452959060668945}] [{title Sailing to Paradise} {score 4.3452959060668945}] [{title Boat People} {score 3.711261749267578}] [{title Boat Trip} {score 3.711261749267578}] [{title Three Men in a Boat} {score 3.1153182983398438}] [{title The Glass Bottom Boat} {score 3.1153182983398438}] [{title Jack Goes Boating} {score 3.1153182983398438}] Atlas Search 搜索结果包含
title
字段中具有boat
、vessel
和sail
的电影,因为我们在名为sample_synonyms
的同义词源集合中将boat
、vessel
和sail
配置为boat
的同义词,该集合在集合的索引中指定。Atlas Search 仅在结果中搜索单词
vessel
时返回以下文档{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或sail
的文档,因为我们没有将vessel
配置为同义词源集合中boat
或sail
的同义词。要对此进行测试,将上面查询中的query
字段的值替换为vessel
,然后再次运行查询。同样,Atlas Search 仅在搜索词
sail
的结果中返回以下文档:{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中boat
或vessel
的同义词。要测试此示例,请将上述查询中query
字段的值替换为sail
,然后再次运行查询。
如果创建的索引包含多个同义词映射,则运行高级 Atlas Search 查询。
这些代码示例执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
synonyms-equivalent-query.go
的文件。将代码示例复制并粘贴到
synonyms-equivalent-query.go
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。该查询还会在title
字段中搜索单词attire
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词attire
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.M{ 31 "index": "synonyms-tutorial", 32 "compound": bson.M{ 33 "should": bson.A{ 34 bson.M{ 35 "text": bson.D{ 36 {"path", "title"}, {"query", "automobile"}, {"synonyms", "transportSynonyms"}, 37 }, 38 }, 39 bson.M{ 40 "text": bson.D{ 41 {"path", "title"}, {"query", "attire"}, {"synonyms", "attireSynonyms"}, 42 }, 43 }, 44 }, 45 }, 46 }}} 47 limitStage := bson.D{{"$limit", 10}} 48 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 49 // specify the amount of time the operation can run on the server 50 opts := options.Aggregate().SetMaxTime(5 * time.Second) 51 // run pipeline 52 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 53 if err != nil { 54 panic(err) 55 } 56 // print results 57 var results []bson.D 58 if err = cursor.All(context.TODO(), &results); err != nil { 59 panic(err) 60 } 61 for _, result := range results { 62 fmt.Println(result) 63 } 64 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行以下命令来查询您的集合:
go run synonyms-equivalent-query.go [{title The Dress} {score 4.812004089355469}] [{title Cars} {score 4.197734832763672}] [{title Dressed to Kill} {score 3.891493320465088}] [{title 27 Dresses} {score 3.891493320465088}] [{title Planes, Trains & Automobiles} {score 3.8511905670166016}] [{title Car Wash} {score 3.39473032951355}] [{title Used Cars} {score 3.39473032951355}] [{title Blue Car} {score 3.39473032951355}] [{title Cars 2} {score 3.39473032951355}] [{title Stealing Cars} {score 3.39473032951355}] Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
automobile
的title
字段中带有car
的电影,因为我们将automobile
配置为名为car
、vehicle
和automobile
的同义词源集合中的同义词transport_synonyms
。结果还包含查询术语attire
的标题字段中带有dress
的电影,因为我们将attire
配置为名为attire_synonyms
的同义词源集合中的dress
、apparel
和attire
的同义词。Atlas Search 在
transport_synonyms
源集合中搜索car
或vehicle
以及在attire_synonyms
源集合中搜索dress
或apparel
会返回相同的结果。要测试此示例,将上述查询中query
字段的值替换为car
或vehicle
,并将上述查询中query
字段的值替换为dress
或apparel
,然后再次运行查询。
创建一个名为
synonyms-explicit-query.go
的文件。将代码示例复制并粘贴到
synonyms-explicit-query.go
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。该查询还会在title
字段中搜索单词hat
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词hat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.M{ 31 "index": "synonyms-tutorial", 32 "compound": bson.M{ 33 "must": bson.A{ 34 bson.M{ 35 "text": bson.D{ 36 {"path", "title"}, {"query", "boat"}, {"synonyms", "transportSynonyms"}, 37 }, 38 }, 39 bson.M{ 40 "text": bson.D{ 41 {"path", "title"}, {"query", "hat"}, {"synonyms", "attireSynonyms"}, 42 }, 43 }, 44 }, 45 }, 46 }}} 47 limitStage := bson.D{{"$limit", 10}} 48 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 49 // specify the amount of time the operation can run on the server 50 opts := options.Aggregate().SetMaxTime(5 * time.Second) 51 // run pipeline 52 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 53 if err != nil { 54 panic(err) 55 } 56 // print results 57 var results []bson.D 58 if err = cursor.All(context.TODO(), &results); err != nil { 59 panic(err) 60 } 61 for _, result := range results { 62 fmt.Println(result) 63 } 64 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行以下命令来查询您的集合:
go run synonyms-explicit-query.go [{title Fedora} {score 5.673145294189453}] [{title Vessel} {score 5.373150825500488}] [{title Boats} {score 4.589139938354492}] [{title And the Ship Sails On} {score 4.3452959060668945}] [{title Broken Vessels} {score 4.3452959060668945}] [{title Sailing to Paradise} {score 4.3452959060668945}] [{title Top Hat} {score 4.066137313842773}] [{title A Hatful of Rain} {score 4.066137313842773}] [{title Boat People} {score 3.711261749267578}] [{title Boat Trip} {score 3.711261749267578}] Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
boat
的title
字段中带有vessel
、boat
和sail
的电影,因为我们将boat
配置为名为transport_synonyms
的同义词源集合中的boat
、vessel
和sail
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有boat
或sail
的文档vessel
,因为我们没有将vessel
配置为同义词来源集合中boat
或sail
的同义词。同样,Atlas Search 不会在搜索词sail
的结果中包含title
字段中包含boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中的boat
或vessel
。要测试这些示例,请将上述查询中query
字段的值替换为vessel
或sail
,然后再次运行查询。结果还包含查询词
hat
的标题字段中带有fedora
和hat
的电影,因为我们将hat
配置为名为attire_synonyms
的同义词源集合中的hat
、fedora
和headgear
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有hat
或fedora
的文档headgear
,因为我们没有将headgear
配置为同义词来源集合中hat
或fedora
的同义词。同样,Atlas Search 不会在搜索词fedora
的结果中包含title
字段中包含hat
或headgear
的文档,因为我们没有将fedora
配置为同义词源集合中的hat
或headgear
。要测试这些示例,请将上述查询中query
字段的值替换为fedora
或headgear
,然后再次运行查询。
对 集合运行简单的Atlas Search查询。movies
这些代码示例执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
SynonymsEquivalentQuery.java
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import static com.mongodb.client.model.Projections.include; 8 import static com.mongodb.client.model.Projections.computed; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsEquivalentQuery { 16 public static void main( String[] args ) { 17 // define query 18 Document agg = new Document("$search", 19 new Document("index", "synonyms-tutorial") 20 .append("text", 21 new Document("query", "automobile") 22 .append("path","title") 23 .append("synonyms", "transportSynonyms"))); 24 25 // specify connection 26 String uri = "<connection-string>"; 27 28 // establish connection and set namespace 29 try (MongoClient mongoClient = MongoClients.create(uri)) { 30 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 31 MongoCollection<Document> collection = database.getCollection("movies"); 32 33 // run query and print results 34 collection.aggregate(Arrays.asList(agg, 35 limit(10), 36 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 37 ).forEach(doc -> System.out.println(doc.toJson())); 38 } 39 } 40 } 注意
要在 Maven 环境中运行示例代码,请在文件中的 import 语句上方添加以下内容。
package com.mongodb.drivers; 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。编译并运行
SynonymsEquivalentQuery.java
文件。javac SynonymsEquivalentQuery.java java SynonymsEquivalentQuery {"title": "Cars", "score": 4.197734832763672} {"title": "Planes, Trains & Automobiles", "score": 3.8511905670166016} {"title": "Car Wash", "score": 3.39473032951355} {"title": "Used Cars", "score": 3.39473032951355} {"title": "Blue Car", "score": 3.39473032951355} {"title": "Cars 2", "score": 3.39473032951355} {"title": "Stealing Cars", "score": 3.39473032951355} {"title": "Cop Car", "score": 3.39473032951355} {"title": "The Cars That Eat People", "score": 2.8496146202087402} {"title": "Khrustalyov, My Car!", "score": 2.8496146202087402} Atlas Search 结果包含在
title
字段中带有car
和automobile
的电影,尽管查询术语是automobile
,因为我们在名为sample_synonyms
的同义词来源集合中将automobile
配置为car
、vehicle
和automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词car
和vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的query
字段的值替换为car
或vehicle
,然后运行查询。
创建一个名为
SynonymsExplicitQuery.java
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import static com.mongodb.client.model.Projections.include; 8 import static com.mongodb.client.model.Projections.computed; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsExplicitQuery { 16 public static void main( String[] args ) { 17 // define query 18 Document agg = new Document("$search", 19 new Document("index", "synonyms-tutorial") 20 .append("text", 21 new Document("query", "boat") 22 .append("path","title") 23 .append("synonyms", "transportSynonyms"))); 24 25 // specify connection 26 String uri = "<connection-string>"; 27 28 // establish connection and set namespace 29 try (MongoClient mongoClient = MongoClients.create(uri)) { 30 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 31 MongoCollection<Document> collection = database.getCollection("movies"); 32 33 // run query and print results 34 collection.aggregate(Arrays.asList(agg, 35 limit(10), 36 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 37 ).forEach(doc -> System.out.println(doc.toJson())); 38 } 39 } 40 } 注意
要在 Maven 环境中运行示例代码,请在文件中的 import 语句上方添加以下内容。
package com.mongodb.drivers; 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。编译并运行
SynonymsExplicitQuery.java
文件。javac SynonymsExplicitQuery.java java SynonymsExplicitQuery {"title": "Vessel", "score": 5.373150825500488} {"title": "Boats", "score": 4.589139938354492} {"title": "And the Ship Sails On", "score": 4.3452959060668945} {"title": "Broken Vessels", "score": 4.3452959060668945} {"title": "Sailing to Paradise", "score": 4.3452959060668945} {"title": "Boat People", "score": 3.711261749267578} {"title": "Boat Trip", "score": 3.711261749267578} {"title": "Three Men in a Boat", "score": 3.1153182983398438} {"title": "The Glass Bottom Boat", "score": 3.1153182983398438} {"title": "Jack Goes Boating", "score": 3.1153182983398438} Atlas Search 搜索结果包含
title
字段中具有boat
、vessel
和sail
的电影,因为我们在名为sample_synonyms
的同义词源集合中将boat
、vessel
和sail
配置为boat
的同义词,该集合在集合的索引中指定。Atlas Search 仅在结果中搜索单词
vessel
时返回以下文档{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或sail
的文档,因为我们没有将vessel
配置为同义词源集合中boat
或sail
的同义词。要对此进行测试,将上面查询中的query
字段的值替换为vessel
,然后再次运行查询。同样,Atlas Search 仅在搜索词
sail
的结果中返回以下文档:{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中boat
或vessel
的同义词。要测试此示例,请将上述查询中query
字段的值替换为sail
,然后再次运行查询。
如果您使用多个同义词映射创建索引,则运行高级 Atlas Search 查询。
这些代码示例执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
SynonymsEquivalentQuery.java
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。该查询还会在title
字段中搜索单词attire
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词attire
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.computed; 6 import static com.mongodb.client.model.Projections.excludeId; 7 import static com.mongodb.client.model.Projections.fields; 8 import static com.mongodb.client.model.Projections.include; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsEquivalentQuery { 16 public static void main( String[] args ) { 17 Document agg = new Document("$search", 18 new Document("index", "synonyms-tutorial") 19 .append("compound", 20 new Document("should", Arrays.asList(new Document("text", 21 new Document("path", "title") 22 .append("query", "automobile") 23 .append("synonyms", "transportSynonyms")), 24 new Document("text", 25 new Document("path", "title") 26 .append("query", "attire") 27 .append("synonyms", "attireSynonyms")))))); 28 29 String uri = "<connection-string>"; 30 31 try (MongoClient mongoClient = MongoClients.create(uri)) { 32 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 33 MongoCollection<Document> collection = database.getCollection("movies"); 34 35 collection.aggregate(Arrays.asList(agg, 36 limit(10), 37 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 38 ).forEach(doc -> System.out.println(doc.toJson())); 39 } 40 } 41 } 注意
要在 Maven 环境中运行示例代码,请在文件中的 import 语句上方添加以下内容。
package com.mongodb.drivers; 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。编译并运行
SynonymsEquivalentQuery.java
文件。javac SynonymsEquivalentQuery.java java SynonymsEquivalentQuery {"title": "The Dress", "score": 4.812004089355469} {"title": "Cars", "score": 4.197734832763672} {"title": "Dressed to Kill", "score": 3.891493320465088} {"title": "27 Dresses", "score": 3.891493320465088} {"title": "Planes, Trains & Automobiles", "score": 3.8511905670166016} {"title": "Car Wash", "score": 3.39473032951355} {"title": "Used Cars", "score": 3.39473032951355} {"title": "Blue Car", "score": 3.39473032951355} {"title": "Cars 2", "score": 3.39473032951355} {"title": "Stealing Cars", "score": 3.39473032951355} Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
automobile
的title
字段中带有car
的电影,因为我们将automobile
配置为名为car
、vehicle
和automobile
的同义词源集合中的同义词transport_synonyms
。结果还包含查询术语attire
的标题字段中带有dress
的电影,因为我们将attire
配置为名为attire_synonyms
的同义词源集合中的dress
、apparel
和attire
的同义词。Atlas Search 在
transport_synonyms
源集合中搜索car
或vehicle
以及在attire_synonyms
源集合中搜索dress
或apparel
会返回相同的结果。要测试此示例,将上述查询中query
字段的值替换为car
或vehicle
,并将上述查询中query
字段的值替换为dress
或apparel
,然后再次运行查询。
创建一个名为
SynonymsExplicitQuery.java
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。该查询还会在title
字段中搜索单词hat
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词hat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.computed; 6 import static com.mongodb.client.model.Projections.excludeId; 7 import static com.mongodb.client.model.Projections.fields; 8 import static com.mongodb.client.model.Projections.include; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsExplicitQuery { 16 public static void main( String[] args ) { 17 Document agg = new Document("$search", 18 new Document("index", "synonyms-tutorial") 19 .append("compound", 20 new Document("should", Arrays.asList(new Document("text", 21 new Document("path", "title") 22 .append("query", "boat") 23 .append("synonyms", "transportSynonyms")), 24 new Document("text", 25 new Document("path", "title") 26 .append("query", "hat") 27 .append("synonyms", "attireSynonyms")))))); 28 29 String uri = "<connection-string>"; 30 31 try (MongoClient mongoClient = MongoClients.create(uri)) { 32 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 33 MongoCollection<Document> collection = database.getCollection("movies"); 34 35 collection.aggregate(Arrays.asList(agg, 36 limit(10), 37 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 38 ).forEach(doc -> System.out.println(doc.toJson())); 39 } 40 } 41 } 注意
要在 Maven 环境中运行示例代码,请在文件中的 import 语句上方添加以下内容。
package com.mongodb.drivers; 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。编译并运行
SynonymsExplicitQuery.java
文件。javac SynonymsExplicitQuery.java java SynonymsExplicitQuery {"title": "Fedora", "score": 5.673145294189453} {"title": "Vessel", "score": 5.373150825500488} {"title": "Boats", "score": 4.589139938354492} {"title": "And the Ship Sails On", "score": 4.3452959060668945} {"title": "Broken Vessels", "score": 4.3452959060668945} {"title": "Sailing to Paradise", "score": 4.3452959060668945} {"title": "Top Hat", "score": 4.066137313842773} {"title": "A Hatful of Rain", "score": 4.066137313842773} {"title": "Boat People", "score": 3.711261749267578} {"title": "Boat Trip", "score": 3.711261749267578} Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
boat
的title
字段中带有vessel
、boat
和sail
的电影,因为我们将boat
配置为名为transport_synonyms
的同义词源集合中的boat
、vessel
和sail
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有boat
或sail
的文档vessel
,因为我们没有将vessel
配置为同义词来源集合中boat
或sail
的同义词。同样,Atlas Search 不会在搜索词sail
的结果中包含title
字段中包含boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中的boat
或vessel
。要测试这些示例,请将上述查询中query
字段的值替换为vessel
或sail
,然后再次运行查询。结果还包含查询词
hat
的标题字段中带有fedora
和hat
的电影,因为我们将hat
配置为名为attire_synonyms
的同义词源集合中的hat
、fedora
和headgear
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有hat
或fedora
的文档headgear
,因为我们没有将headgear
配置为同义词来源集合中hat
或fedora
的同义词。同样,Atlas Search 不会在搜索词fedora
的结果中包含title
字段中包含hat
或headgear
的文档,因为我们没有将fedora
配置为同义词源集合中的hat
或headgear
。要测试这些示例,请将上述查询中query
字段的值替换为fedora
或headgear
,然后再次运行查询。
对 集合运行简单的Atlas Search查询。movies
这些代码示例执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
打印与
AggregateFlow
实例中的查询相匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
SynonymsEquivalentQuery.kt
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "text", 22 Document("query", "automobile") 23 .append("path", "title") 24 .append("synonyms", "transportSynonyms") 25 ) 26 ) 27 28 // run query and print results 29 val resultsFlow = collection.aggregate<Document>( 30 listOf( 31 agg, 32 limit(10), 33 project(fields( 34 excludeId(), 35 include("title"), 36 computed("score", Document("\$meta", "searchScore")) 37 )) 38 ) 39 ) 40 resultsFlow.collect { println(it) } 41 } 42 mongoClient.close() 43 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行
SynonymsEquivalentQuery.kt
文件。当你在 IDE 中运行
SynonymsEquivalentQuery.kt
程序时,它会打印以下文档:Document{{title=Cars, score=4.140600204467773}} Document{{title=Planes, Trains & Automobiles, score=3.8122920989990234}} Document{{title=Blue Car, score=3.348478317260742}} Document{{title=Used Cars, score=3.348478317260742}} Document{{title=Cars 2, score=3.348478317260742}} Document{{title=Stealing Cars, score=3.348478317260742}} Document{{title=Cop Car, score=3.348478317260742}} Document{{title=Car Wash, score=3.348478317260742}} Document{{title=The Cars That Eat People, score=2.810762405395508}} Document{{title=Revenge of the Electric Car, score=2.810762405395508}} Atlas Search 结果包含在
title
字段中带有car
和automobile
的电影,尽管查询术语是automobile
,因为我们在名为sample_synonyms
的同义词来源集合中将automobile
配置为car
、vehicle
和automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词car
和vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的query
字段的值替换为car
或vehicle
,然后运行查询。
创建一个名为
SynonymsExplicitQuery.kt
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "text", 22 Document("query", "boat") 23 .append("path", "title") 24 .append("synonyms", "transportSynonyms") 25 ) 26 ) 27 28 // run query and print results 29 val resultsFlow = collection.aggregate<Document>( 30 listOf( 31 agg, 32 limit(10), 33 project(fields( 34 excludeId(), 35 include("title"), 36 computed("score", Document("\$meta", "searchScore")) 37 )) 38 ) 39 ) 40 resultsFlow.collect { println(it) } 41 } 42 mongoClient.close() 43 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行
SynonymsExplicitQuery.kt
文件。当你在 IDE 中运行
SynonymsExplicitQuery.kt
程序时,它会打印以下文档:Document{{title=Vessel, score=5.3159894943237305}} Document{{title=Boats, score=4.597315311431885}} Document{{title=Sailing to Paradise, score=4.299008369445801}} Document{{title=And the Ship Sails On, score=4.299008369445801}} Document{{title=Broken Vessels, score=4.299008369445801}} Document{{title=Boat Trip, score=3.717820644378662}} Document{{title=Boat People, score=3.717820644378662}} Document{{title=Jack Goes Boating, score=3.1207938194274902}} Document{{title=The Glass Bottom Boat, score=3.1207938194274902}} Document{{title=Raspberry Boat Refugee, score=3.1207938194274902}} Atlas Search 搜索结果包含
title
字段中具有boat
、vessel
和sail
的电影,因为我们在名为sample_synonyms
的同义词源集合中将boat
、vessel
和sail
配置为boat
的同义词,该集合在集合的索引中指定。Atlas Search 仅在结果中搜索单词
vessel
时返回以下文档{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或sail
的文档,因为我们没有将vessel
配置为同义词源集合中boat
或sail
的同义词。要对此进行测试,将上面查询中的query
字段的值替换为vessel
,然后再次运行查询。同样,Atlas Search 仅在搜索词
sail
的结果中返回以下文档:{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中boat
或vessel
的同义词。要测试此示例,请将上述查询中query
字段的值替换为sail
,然后再次运行查询。
如果您使用多个同义词映射创建索引,则运行高级 Atlas Search 查询。
这些代码示例执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
打印与
AggregateFlow
实例中的查询相匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
SynonymsEquivalentQuery.kt
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。该查询还会在title
字段中搜索单词attire
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词attire
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "compound", 22 Document( 23 "should", listOf( 24 Document( 25 "text", 26 Document("path", "title") 27 .append("query", "automobile") 28 .append("synonyms", "transportSynonyms") 29 ), 30 Document( 31 "text", 32 Document("path", "title") 33 .append("query", "attire") 34 .append("synonyms", "attireSynonyms") 35 ) 36 ) 37 ) 38 ) 39 ) 40 41 // run query and print results 42 val resultsFlow = collection.aggregate<Document>( 43 listOf( 44 agg, 45 limit(10), 46 project(fields( 47 excludeId(), 48 include("title"), 49 computed("score", Document("\$meta", "searchScore")) 50 )) 51 ) 52 ) 53 resultsFlow.collect { println(it) } 54 } 55 mongoClient.close() 56 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行
SynonymsEquivalentQuery.kt
文件。当你在 IDE 中运行
SynonymsEquivalentQuery.kt
程序时,它会打印以下文档:Document{{title=The Dress, score=4.852960586547852}} Document{{title=Cars, score=4.140600204467773}} Document{{title=27 Dresses, score=3.9245595932006836}} Document{{title=Planes, Trains & Automobiles, score=3.8122920989990234}} Document{{title=Car Wash, score=3.348478317260742}} Document{{title=Used Cars, score=3.348478317260742}} Document{{title=Blue Car, score=3.348478317260742}} Document{{title=Cars 2, score=3.348478317260742}} Document{{title=Stealing Cars, score=3.348478317260742}} Document{{title=Cop Car, score=3.348478317260742}} Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
automobile
的title
字段中带有car
的电影,因为我们将automobile
配置为名为car
、vehicle
和automobile
的同义词源集合中的同义词transport_synonyms
。结果还包含查询术语attire
的标题字段中带有dress
的电影,因为我们将attire
配置为名为attire_synonyms
的同义词源集合中的dress
、apparel
和attire
的同义词。Atlas Search 在
transport_synonyms
源集合中搜索car
或vehicle
以及在attire_synonyms
源集合中搜索dress
或apparel
会返回相同的结果。要测试此示例,将上述查询中query
字段的值替换为car
或vehicle
,并将上述查询中query
字段的值替换为dress
或apparel
,然后再次运行查询。
创建一个名为
SynonymsExplicitQuery.kt
的文件。将以下代码复制并粘贴到该文件中。
该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。该查询还会在title
字段中搜索单词hat
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词hat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "compound", 22 Document( 23 "should", listOf( 24 Document( 25 "text", 26 Document("path", "title") 27 .append("query", "boat") 28 .append("synonyms", "transportSynonyms") 29 ), 30 Document( 31 "text", 32 Document("path", "title") 33 .append("query", "hat") 34 .append("synonyms", "attireSynonyms") 35 ) 36 ) 37 ) 38 ) 39 ) 40 41 // run query and print results 42 val resultsFlow = collection.aggregate<Document>( 43 listOf( 44 agg, 45 limit(10), 46 project(fields( 47 excludeId(), 48 include("title"), 49 computed("score", Document("\$meta", "searchScore")) 50 )) 51 ) 52 ) 53 54 resultsFlow.collect { println(it) } 55 } 56 57 mongoClient.close() 58 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。运行
SynonymsExplicitQuery.kt
文件。当你在 IDE 中运行
SynonymsExplicitQuery.kt
程序时,它会打印以下文档:Document{{title=Fedora, score=5.6159772872924805}} Document{{title=Vessel, score=5.3159894943237305}} Document{{title=Boats, score=4.597315311431885}} Document{{title=And the Ship Sails On, score=4.299008369445801}} Document{{title=Broken Vessels, score=4.299008369445801}} Document{{title=Sailing to Paradise, score=4.299008369445801}} Document{{title=Top Hat, score=4.01986026763916}} Document{{title=A Hatful of Rain, score=4.01986026763916}} Document{{title=Boat People, score=3.717820644378662}} Document{{title=Boat Trip, score=3.717820644378662}} Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
boat
的title
字段中带有vessel
、boat
和sail
的电影,因为我们将boat
配置为名为transport_synonyms
的同义词源集合中的boat
、vessel
和sail
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有boat
或sail
的文档vessel
,因为我们没有将vessel
配置为同义词来源集合中boat
或sail
的同义词。同样,Atlas Search 不会在搜索词sail
的结果中包含title
字段中包含boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中的boat
或vessel
。要测试这些示例,请将上述查询中query
字段的值替换为vessel
或sail
,然后再次运行查询。结果还包含查询词
hat
的标题字段中带有fedora
和hat
的电影,因为我们将hat
配置为名为attire_synonyms
的同义词源集合中的hat
、fedora
和headgear
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有hat
或fedora
的文档headgear
,因为我们没有将headgear
配置为同义词来源集合中hat
或fedora
的同义词。同样,Atlas Search 不会在搜索词fedora
的结果中包含title
字段中包含hat
或headgear
的文档,因为我们没有将fedora
配置为同义词源集合中的hat
或headgear
。要测试这些示例,请将上述查询中query
字段的值替换为fedora
或headgear
,然后再次运行查询。
对 集合运行简单的Atlas Search查询。movies
这些代码示例执行以下任务:
导入
mongodb
,即 MongoDB 的 Node.js 驱动程序。创建一个
MongoClient
类实例,以建立与 Atlas 集群的连接。遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
synonyms-equivalent-query.js
的文件。将代码示例复制并粘贴到
synonyms-equivalent-query.js
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 $search: { 7 index: "synonyms-tutorial", 8 text: { 9 path: "title", 10 query: "automobile", 11 synonyms: "transportSynonyms", 12 }, 13 }, 14 }, 15 { 16 $limit: 10, 17 }, 18 { 19 $project: { 20 _id: 0, 21 title: 1, 22 score: { $meta: "searchScore" }, 23 }, 24 }, 25 ]; 26 27 MongoClient.connect( 28 "<connection-string>", 29 { useNewUrlParser: true, useUnifiedTopology: true }, 30 async function (connectErr, client) { 31 assert.equal(null, connectErr); 32 const coll = client.db("sample_mflix").collection("movies"); 33 let cursor = await coll.aggregate(agg); 34 await cursor.forEach((doc) => console.log(doc)); 35 client.close(); 36 } 37 ); 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
node synonyms-equivalent-query.js { title: 'Cars', score: 4.197734832763672 } { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 } { title: 'Car Wash', score: 3.39473032951355 } { title: 'Used Cars', score: 3.39473032951355 } { title: 'Blue Car', score: 3.39473032951355 } { title: 'Cars 2', score: 3.39473032951355 } { title: 'Stealing Cars', score: 3.39473032951355 } { title: 'Cop Car', score: 3.39473032951355 } { title: 'The Cars That Eat People', score: 2.8496146202087402 } { title: 'Khrustalyov, My Car!', score: 2.8496146202087402 } Atlas Search 结果包含在
title
字段中带有car
和automobile
的电影,尽管查询术语是automobile
,因为我们在名为sample_synonyms
的同义词来源集合中将automobile
配置为car
、vehicle
和automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词car
和vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的query
字段的值替换为car
或vehicle
,然后运行查询。
创建一个名为
synonyms-explicit-query.js
的文件。将代码示例复制并粘贴到
synonyms-explicit-query.js
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 $search: { 7 index: "synonyms-tutorial", 8 text: { 9 path: "title", 10 query: "boat", 11 synonyms: "transportSynonyms", 12 }, 13 }, 14 }, 15 { 16 $limit: 10, 17 }, 18 { 19 $project: { 20 _id: 0, 21 title: 1, 22 score: { $meta: "searchScore" }, 23 }, 24 }, 25 ]; 26 27 MongoClient.connect( 28 "<connection-string>", 29 { useNewUrlParser: true, useUnifiedTopology: true }, 30 async function (connectErr, client) { 31 assert.equal(null, connectErr); 32 const coll = client.db("sample_mflix").collection("movies"); 33 let cursor = await coll.aggregate(agg); 34 await cursor.forEach((doc) => console.log(doc)); 35 client.close(); 36 } 37 ); 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
node synonyms-explicit-query.js { title: 'Vessel', score: 5.373150825500488 } { title: 'Boats', score: 4.589139938354492 } { title: 'And the Ship Sails On', score: 4.3452959060668945 } { title: 'Broken Vessels', score: 4.3452959060668945 } { title: 'Sailing to Paradise', score: 4.3452959060668945 } { title: 'Boat People', score: 3.711261749267578 } { title: 'Boat Trip', score: 3.711261749267578 } { title: 'Three Men in a Boat', score: 3.1153182983398438 } { title: 'The Glass Bottom Boat', score: 3.1153182983398438 } { title: 'Jack Goes Boating', score: 3.1153182983398438 } Atlas Search 搜索结果包含
title
字段中具有boat
、vessel
和sail
的电影,因为我们在名为sample_synonyms
的同义词源集合中将boat
、vessel
和sail
配置为boat
的同义词,该集合在集合的索引中指定。Atlas Search 仅在结果中搜索单词
vessel
时返回以下文档{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或sail
的文档,因为我们没有将vessel
配置为同义词源集合中boat
或sail
的同义词。要对此进行测试,将上面查询中的query
字段的值替换为vessel
,然后再次运行查询。同样,Atlas Search 仅在搜索词
sail
的结果中返回以下文档:{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中boat
或vessel
的同义词。要测试此示例,请将上述查询中query
字段的值替换为sail
,然后再次运行查询。
如果您使用多个同义词映射创建索引,则运行高级 Atlas Search 查询。
这些代码示例执行以下任务:
导入
mongodb
,即 MongoDB 的 Node.js 驱动程序。创建一个
MongoClient
类实例,以建立与 Atlas 集群的连接。遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
synonyms-equivalent-query.js
的文件。将代码示例复制并粘贴到
synonyms-equivalent-query.js
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。该查询还会在title
字段中搜索单词attire
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词attire
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 pconst MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'synonyms-tutorial', 8 'compound': { 9 'should': [ 10 { 11 'text': { 12 'path': 'title', 13 'query': 'automobile', 14 'synonyms': 'transportSynonyms' 15 } 16 }, { 17 'text': { 18 'path': 'title', 19 'query': 'attire', 20 'synonyms': 'attireSynonyms' 21 } 22 } 23 ] 24 } 25 } 26 }, { 27 '$limit': 10 28 }, { 29 '$project': { 30 '_id': 0, 31 'title': 1, 32 'score': { 33 '$meta': 'searchScore' 34 } 35 } 36 } 37 ]; 38 39 MongoClient.connect( 40 "<connection-string>", 41 { useNewUrlParser: true, useUnifiedTopology: true }, 42 async function (connectErr, client) { 43 assert.equal(null, connectErr); 44 const coll = client.db("sample_mflix").collection("movies"); 45 let cursor = await coll.aggregate(agg); 46 await cursor.forEach((doc) => console.log(doc)); 47 client.close(); 48 } 49 ); 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
node synonyms-equivalent-query.js { title: 'The Dress', score: 4.812004089355469 } { title: 'Cars', score: 4.197734832763672 } { title: 'Dressed to Kill', score: 3.891493320465088 } { title: '27 Dresses', score: 3.891493320465088 } { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 } { title: 'Car Wash', score: 3.39473032951355 } { title: 'Used Cars', score: 3.39473032951355 } { title: 'Blue Car', score: 3.39473032951355 } { title: 'Cars 2', score: 3.39473032951355 } { title: 'Stealing Cars', score: 3.39473032951355 } Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
automobile
的title
字段中带有car
的电影,因为我们将automobile
配置为名为car
、vehicle
和automobile
的同义词源集合中的同义词transport_synonyms
。结果还包含查询术语attire
的标题字段中带有dress
的电影,因为我们将attire
配置为名为attire_synonyms
的同义词源集合中的dress
、apparel
和attire
的同义词。Atlas Search 在
transport_synonyms
源集合中搜索car
或vehicle
以及在attire_synonyms
源集合中搜索dress
或apparel
会返回相同的结果。要测试此示例,将上述查询中query
字段的值替换为car
或vehicle
,并将上述查询中query
字段的值替换为dress
或apparel
,然后再次运行查询。
创建一个名为
synonyms-explicit-query.js
的文件。将代码示例复制并粘贴到
synonyms-explicit-query.js
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。该查询还会在title
字段中搜索单词hat
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词hat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'synonyms-tutorial', 8 'compound': { 9 'should': [ 10 { 11 'text': { 12 'path': 'title', 13 'query': 'boat', 14 'synonyms': 'transportSynonyms' 15 } 16 }, { 17 'text': { 18 'path': 'title', 19 'query': 'hat', 20 'synonyms': 'attireSynonyms' 21 } 22 } 23 ] 24 } 25 } 26 }, { 27 '$limit': 10 28 }, { 29 '$project': { 30 '_id': 0, 31 'title': 1, 32 'score': { 33 '$meta': 'searchScore' 34 } 35 } 36 } 37 ]; 38 39 MongoClient.connect( 40 "<connection-string>", 41 { useNewUrlParser: true, useUnifiedTopology: true }, 42 async function (connectErr, client) { 43 assert.equal(null, connectErr); 44 const coll = client.db("sample_mflix").collection("movies"); 45 let cursor = await coll.aggregate(agg); 46 await cursor.forEach((doc) => console.log(doc)); 47 client.close(); 48 } 49 ); 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
node synonyms-explicit-query.js { title: 'Fedora', score: 5.673145294189453 } { title: 'Vessel', score: 5.373150825500488 } { title: 'Boats', score: 4.589139938354492 } { title: 'And the Ship Sails On', score: 4.3452959060668945 } { title: 'Broken Vessels', score: 4.3452959060668945 } { title: 'Sailing to Paradise', score: 4.3452959060668945 } { title: 'Top Hat', score: 4.066137313842773 } { title: 'A Hatful of Rain', score: 4.066137313842773 } { title: 'Boat People', score: 3.711261749267578 } { title: 'Boat Trip', score: 3.711261749267578 } Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
boat
的title
字段中带有vessel
、boat
和sail
的电影,因为我们将boat
配置为名为transport_synonyms
的同义词源集合中的boat
、vessel
和sail
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有boat
或sail
的文档vessel
,因为我们没有将vessel
配置为同义词来源集合中boat
或sail
的同义词。同样,Atlas Search 不会在搜索词sail
的结果中包含title
字段中包含boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中的boat
或vessel
。要测试这些示例,请将上述查询中query
字段的值替换为vessel
或sail
,然后再次运行查询。结果还包含查询词
hat
的标题字段中带有fedora
和hat
的电影,因为我们将hat
配置为名为attire_synonyms
的同义词源集合中的hat
、fedora
和headgear
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有hat
或fedora
的文档headgear
,因为我们没有将headgear
配置为同义词来源集合中hat
或fedora
的同义词。同样,Atlas Search 不会在搜索词fedora
的结果中包含title
字段中包含hat
或headgear
的文档,因为我们没有将fedora
配置为同义词源集合中的hat
或headgear
。要测试这些示例,请将上述查询中query
字段的值替换为fedora
或headgear
,然后再次运行查询。
对 集合运行简单的Atlas Search查询。movies
这些代码示例执行以下任务:
导入
pymongo
、MongoDB 的 Python 驱动程序和dns
模块,这是使用 DNS 种子列表连接字符串将pymongo
连接到Atlas
所必需的。创建一个
MongoClient
类实例,以建立与 Atlas 集群的连接。遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
synonyms-equivalent-query.py
的文件。将代码示例复制并粘贴到
synonyms-equivalent.py
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。$limit
阶段将输出限制为10结果$project
阶段排除title
以外的所有字段,并添加名为score
的字段
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'text': { 10 'path': 'title', 11 'query': 'automobile', 12 'synonyms': 'transportSynonyms' 13 } 14 } 15 }, 16 { 17 '$limit': 10 18 }, 19 { 20 '$project': { 21 '_id': 0, 22 'title': 1, 23 'score': { 24 '$meta': 'searchScore' 25 } 26 } 27 } 28 ]) 29 30 for i in result: 31 print(i) 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
python synonyms-equivalent-query.py {'title': 'Cars', 'score': 4.197734832763672} {'title': 'Planes, Trains & Automobiles', 'score': 3.8511905670166016} {'title': 'Car Wash', 'score': 3.39473032951355} {'title': 'Used Cars', 'score': 3.39473032951355} {'title': 'Blue Car', 'score': 3.39473032951355} {'title': 'Cars 2', 'score': 3.39473032951355} {'title': 'Stealing Cars', 'score': 3.39473032951355} {'title': 'Cop Car', 'score': 3.39473032951355} {'title': 'The Cars That Eat People', 'score': 2.8496146202087402} {'title': 'Khrustalyov, My Car!', 'score': 2.8496146202087402} Atlas Search 结果包含在
title
字段中带有car
和automobile
的电影,尽管查询术语是automobile
,因为我们在名为sample_synonyms
的同义词来源集合中将automobile
配置为car
、vehicle
和automobile
的同义词,该集合在索引中指定。Atlas Search 对于单词car
和vehicle
的搜索返回相同的结果。要对此进行测试,将上面查询中的query
字段的值替换为car
或vehicle
,然后运行查询。
创建一个名为
synonyms-explicit-query.py
的文件。将代码示例复制并粘贴到
synonyms-explicit.py
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'text': { 10 'path': 'title', 11 'query': 'boat', 12 'synonyms': 'transportSynonyms' 13 } 14 } 15 }, 16 { 17 '$limit': 10 18 }, 19 { 20 '$project': { 21 '_id': 0, 22 'title': 1, 23 'score': { 24 '$meta': 'searchScore' 25 } 26 } 27 } 28 ]) 29 30 for i in result: 31 print(i) 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
python synonyms-explicit-query.py {'title': 'Vessel', 'score': 5.373150825500488} {'title': 'Boats', 'score': 4.589139938354492} {'title': 'And the Ship Sails On', 'score': 4.3452959060668945} {'title': 'Broken Vessels', 'score': 4.3452959060668945} {'title': 'Sailing to Paradise', 'score': 4.3452959060668945} {'title': 'Boat People', 'score': 3.711261749267578} {'title': 'Boat Trip', 'score': 3.711261749267578} {'title': 'Three Men in a Boat', 'score': 3.1153182983398438} {'title': 'The Glass Bottom Boat', 'score': 3.1153182983398438} {'title': 'Jack Goes Boating', 'score': 3.1153182983398438} Atlas Search 搜索结果包含
title
字段中具有boat
、vessel
和sail
的电影,因为我们在名为sample_synonyms
的同义词源集合中将boat
、vessel
和sail
配置为boat
的同义词,该集合在集合的索引中指定。Atlas Search 仅在结果中搜索单词
vessel
时返回以下文档{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或sail
的文档,因为我们没有将vessel
配置为同义词源集合中boat
或sail
的同义词。要对此进行测试,将上面查询中的query
字段的值替换为vessel
,然后再次运行查询。同样,Atlas Search 仅在搜索词
sail
的结果中返回以下文档:{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search 不包括结果中
title
字段中带有boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中boat
或vessel
的同义词。要测试此示例,请将上述查询中query
字段的值替换为sail
,然后再次运行查询。
如果您使用多个同义词映射创建索引,则运行高级 Atlas Search 查询。
这些代码示例执行以下任务:
导入
pymongo
、MongoDB 的 Python 驱动程序和dns
模块,这是使用 DNS 种子列表连接字符串将pymongo
连接到Atlas
所必需的。创建一个
MongoClient
类实例,以建立与 Atlas 集群的连接。遍历游标以打印与查询匹配的文档。
Atlas Search 查询结果根据同义词源集合中定义的单词映射类型而有所不同。
创建一个名为
synonyms-equivalent-query.py
的文件。将代码示例复制并粘贴到
synonyms-equivalent.py
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词automobile
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词automobile
同义词的单词。该查询还会在title
字段中搜索单词attire
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词attire
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'compound': { 10 'should': [ 11 { 12 'text': { 13 'path': 'title', 14 'query': 'automobile', 15 'synonyms': 'transportSynonyms' 16 } 17 }, { 18 'text': { 19 'path': 'title', 20 'query': 'attire', 21 'synonyms': 'attireSynonyms' 22 } 23 } 24 ] 25 } 26 } 27 }, { 28 '$limit': 10 29 }, { 30 '$project': { 31 '_id': 0, 32 'title': 1, 33 'score': { 34 '$meta': 'searchScore' 35 } 36 } 37 } 38 ]) 39 40 for i in result: 41 print(i) 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
python synonyms-equivalent-query.py {'title': 'The Dress', 'score': 4.812004089355469} {'title': 'Cars', 'score': 4.197734832763672} {'title': 'Dressed to Kill', 'score': 3.891493320465088} {'title': '27 Dresses', 'score': 3.891493320465088} {'title': 'Planes, Trains & Automobiles', 'score': 3.8511905670166016} {'title': 'Car Wash', 'score': 3.39473032951355} {'title': 'Used Cars', 'score': 3.39473032951355} {'title': 'Blue Car', 'score': 3.39473032951355} {'title': 'Cars 2', 'score': 3.39473032951355} {'title': 'Stealing Cars', 'score': 3.39473032951355} Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
automobile
的title
字段中带有car
的电影,因为我们将automobile
配置为名为car
、vehicle
和automobile
的同义词源集合中的同义词transport_synonyms
。结果还包含查询术语attire
的标题字段中带有dress
的电影,因为我们将attire
配置为名为attire_synonyms
的同义词源集合中的dress
、apparel
和attire
的同义词。Atlas Search 在
transport_synonyms
源集合中搜索car
或vehicle
以及在attire_synonyms
源集合中搜索dress
或apparel
会返回相同的结果。要测试此示例,将上述查询中query
字段的值替换为car
或vehicle
,并将上述查询中query
字段的值替换为dress
或apparel
,然后再次运行查询。
创建一个名为
synonyms-explicit-query.py
的文件。将代码示例复制并粘贴到
synonyms-explicit.py
文件中。该代码示例包含以下阶段:
$search
阶段,在title
字段中搜索单词boat
,并使用名为transportSynonyms
的同义词映射定义在名为transport_synonyms
的同义词源集合中搜索配置为查询单词boat
同义词的单词。该查询还会在title
字段中搜索单词hat
,并使用名为attireSynonyms
的同义词映射定义在名为attire_synonyms
的同义词源集合中搜索配置为查询单词hat
同义词的单词。$limit
阶段用于将输出限制为 10 个结果。$project
阶段排除除title
之外的所有字段,并添加一个名为score
的字段。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'compound': { 10 'should': [ 11 { 12 'text': { 13 'path': 'title', 14 'query': 'boat', 15 'synonyms': 'transportSynonyms' 16 } 17 }, { 18 'text': { 19 'path': 'title', 20 'query': 'hat', 21 'synonyms': 'attireSynonyms' 22 } 23 } 24 ] 25 } 26 } 27 }, { 28 '$limit': 10 29 }, { 30 '$project': { 31 '_id': 0, 32 'title': 1, 33 'score': { 34 '$meta': 'searchScore' 35 } 36 } 37 } 38 ]) 39 40 for i in result: 41 print(i) 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的凭证。运行以下命令来查询您的集合:
python synonyms-explicit-query.py {'title': 'Fedora', 'score': 5.673145294189453} {'title': 'Vessel', 'score': 5.373150825500488} {'title': 'Boats', 'score': 4.589139938354492} {'title': 'And the Ship Sails On', 'score': 4.3452959060668945} {'title': 'Broken Vessels', 'score': 4.3452959060668945} {'title': 'Sailing to Paradise', 'score': 4.3452959060668945} {'title': 'Top Hat', 'score': 4.066137313842773} {'title': 'A Hatful of Rain', 'score': 4.066137313842773} {'title': 'Boat People', 'score': 3.711261749267578} {'title': 'Boat Trip', 'score': 3.711261749267578} Atlas Search 结果包含两个搜索术语的文档。结果包含查询术语
boat
的title
字段中带有vessel
、boat
和sail
的电影,因为我们将boat
配置为名为transport_synonyms
的同义词源集合中的boat
、vessel
和sail
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有boat
或sail
的文档vessel
,因为我们没有将vessel
配置为同义词来源集合中boat
或sail
的同义词。同样,Atlas Search 不会在搜索词sail
的结果中包含title
字段中包含boat
或vessel
的文档,因为我们没有将sail
配置为同义词源集合中的boat
或vessel
。要测试这些示例,请将上述查询中query
字段的值替换为vessel
或sail
,然后再次运行查询。结果还包含查询词
hat
的标题字段中带有fedora
和hat
的电影,因为我们将hat
配置为名为attire_synonyms
的同义词源集合中的hat
、fedora
和headgear
的同义词。Atlas Search 不包括搜索结果中
title
字段中带有hat
或fedora
的文档headgear
,因为我们没有将headgear
配置为同义词来源集合中hat
或fedora
的同义词。同样,Atlas Search 不会在搜索词fedora
的结果中包含title
字段中包含hat
或headgear
的文档,因为我们没有将fedora
配置为同义词源集合中的hat
或headgear
。要测试这些示例,请将上述查询中query
字段的值替换为fedora
或headgear
,然后再次运行查询。