如何运行部分匹配 Atlas Search 查询
本教程介绍如何在 sample_mflix.movies
集合上创建索引,并对 plot
字段运行部分字符串查询。要返回部分字符串查询的匹配项,可以使用以下操作符之一:
autocomplete 操作符,它允许在指定字段中搜索包含您在查询中所指定字符序列的单词或短语。
短语操作符,允许您按您指定的术语之间的距离搜索文档的指定字段,其中包含查询字符串中的术语。
regex 运算符,其支持使用正则表达式在指定字段中搜索字符串。
通配符操作符,允许您使用查询中的特殊字符搜索指定字段,以匹配任何字符。
本教程将指导您完成以下步骤:
在
sample_mflix.movies
集合的plot
字段上设置 Atlas Search 索引。使用自动完成、短语、正则表达式和通配符操作符对
sample_mflix.movies
中的plot
字段运行部分字符串的 Atlas Search 查询。
开始之前,请确保 Atlas 集群满足先决条件中所述的要求。
要创建 Atlas Search 索引,您必须拥有 Project Data Access Admin
或更高的项目访问权限。
创建 Atlas Search 索引
在本部分中,您将在 sample_mflix.movies
集合中的 plot
字段上创建一个 Atlas 搜索索引,以便针对这些字段运行部分匹配查询。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 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 字段中输入
partial-match-tutorial
。如果将索引命名为
default
,则在使用 $search 管道阶段时无需指定index
参数。如果您为索引指定了自定义名称,则必须在index
参数中指定此名称。在 Database and Collection(数据库和集合)部分中找到
sample_mflix
数据库,然后选择movies
集合。
plot
在 字段上定义索引。
您可以使用 Atlas 用户界面中的 Atlas Search Visual Editor 或 Atlas Search JSON Editor 来创建索引。
单击 Next(连接)。
单击 Refine Your Index(连接)。
在 Index Configurations 部分中,切换以禁用 Dynamic Mapping 。
在 Field Mappings 部分中,单击
Add Field 显示 Add Field Mapping 窗口。
单击 Quick Start for Text Fields(连接)。
从下拉列表中选择 Search-as-you-type 模板,然后查看默认设置。
要了解关于这些设置的更多信息,请参阅如何为自动完成的字段编制索引。
单击 Quick Start for Text Fields(连接)。
从下拉列表中选择 Full Text Search 模板,然后查看默认设置。
要了解有关这些设置的更多信息,请参阅如何索引字符串字段。
从下拉列表中选择 Customized Configuration。
从 Data Type 下拉列表中选择 String,以使用通配符操作符运行查询。
修改数据类型的默认设置,如下所示:
用户界面字段名称配置Index Analyzerlucene.keyword
Search Analyzerlucene.keyword
Index OptionsoffsetsStoretrueIgnore Above无Normsinclude要了解有关这些设置的更多信息,请参阅如何索引字符串字段。
从下拉列表中选择 Customized Configuration。
从 Data Type 下拉列表中选择 String,以使用通配符操作符运行查询。
修改数据类型的默认设置,如下所示:
用户界面字段名称配置Index Analyzerlucene.keyword
Search Analyzerlucene.keyword
Index OptionsoffsetsStoretrueIgnore Above无Normsinclude要了解有关这些设置的更多信息,请参阅如何索引字符串字段。
从 Field Name 下拉列表中选择
plot
。单击 Add 将字段添加到 Field Mappings 部分的列表中。
单击 Save Changes(连接)。
将默认索引定义替换为以下示例索引定义,用于运行查询的操作符。
{ "mappings": { "dynamic": false, "fields": { "plot": [ { "type": "autocomplete", "tokenization": "edgeGram", "minGrams": 2, "maxGrams": 15, "foldDiacritics": true } ] } } } { "mappings": { "fields": { "plot": { "analyzer": "lucene.standard", "type": "string" } } } } { "mappings": { "fields": { "plot": { "analyzer": "lucene.keyword", "type": "string" } } } } { "mappings": { "fields": { "plot": { "analyzer": "lucene.keyword", "type": "string" } } } } 单击 Next(连接)。
运行区分大小写的部分匹配查询
➤ 使用本页的“选择语言”下拉菜单设置本节示例的语言。
可以使用 autocomplete、phrase、regex 和通配符运算符来运行区分大小写的部分匹配查询。本教程使用这些运算符来搜索图表中包含指定部分字符串的影片。
在本部分,您将连接到 Atlas 集群并使用该运算符针对 sample_mflix.movies
集合中的 plot
字段运行样本查询。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 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 页面。
使用您为其创建索引的操作符运行以下 Atlas Search 查询。
以下查询使用运算符查询 sample_mflix.movies
集合的 plot
字段。
将以下查询复制并粘贴到 Query Editor 中,然后点击 Query Editor 中的 Search 按钮。
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
1 [ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "autocomplete": { 6 "path": "plot", 7 "query": "new purchase", 8 "tokenOrder": "any", 9 "fuzzy": { 10 "maxEdits": 2, 11 "prefixLength": 1, 12 "maxExpansions": 256 13 } 14 }, 15 "highlight": { 16 "path": "plot" 17 } 18 } 19 } 20 ]
SCORE: 3 _id: "573a13a4f29313caabd112f0" A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune. Matching fields: plot SCORE: 3 _id: "573a13d1f29313caabd8e209" A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need. Matching fields: plot SCORE: 2 _id: "573a13bef29313caabd5b62d" Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must Matching fields: plot SCORE: 2 _id: "573a13b3f29313caabd3c91e" He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor. Matching fields: plot SCORE: 2 _id: "573a1398f29313caabceb931" A country boy becomes the head of a gang through the purchase of some lucky roses from an old lady. Matching fields: plot, plot SCORE: 1 _id: "573a13a7f29313caabd1b5ab" An illegal Nigerian immigrant discovers the unpalatable side of London life. Matching fields: plot SCORE: 1 _id: "573a13a7f29313caabd1b5c0" A young dropout falls in love with a nightclub dancer... Matching fields: plot SCORE: 1 _id: "573a13a7f29313caabd1b62f" In 1990, to protect his fragile mother from a fatal shock after a long coma, a young man must keep her from learning that her beloved nation of East Germany as she knew it has disappeared. Matching fields: plot SCORE: 1 _id: "573a13a7f29313caabd1b6af" Gadget once again has to fight his arch nemesis, Claw. Matching fields: plot
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
1 [ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "phrase": { 6 "path": "plot", 7 "query": "new purpose", 8 "slop": 5 9 }, 10 "highlight": { 11 "path": "plot" 12 } 13 } 14 } 15 ]
SCORE: 3.7209534645080566 _id: "573a13b1f29313caabd37ae6" The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities. Matching fields: plot SCORE: 1.1507558822631836 _id: "573a13bdf29313caabd58a26" But without a hero, he loses all purpose and must find new meaning to his life. Matching fields: plot SCORE: 1.0041160583496094 _id: "573a1396f29313caabce5197" An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid. Matching fields: plot
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
1 [ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "regex": { 6 "path": "plot", 7 "query": "(.*)new(.*) pur(.*)" 8 } 9 } 10 } 11 ]
SCORE: 1 _id: "573a1397f29313caabce77d9" fullplot: "After the Rebel base on the icy planet Hoth is taken over by the empir…" imdb: Object year: 1980 SCORE: 1 _id: "573a1398f29313caabceb893" plot: "The new owner of the Cleveland Indians puts together a purposely horri…" genres: Array runtime: 107 SCORE: 1 _id: "573a13b1f29313caabd37ae6" plot: "The true story of Richard Pimentel, a brilliant public speaker with a …" genres: Array runtime: 94 SCORE: 1 _id: "573a13d1f29313caabd8e209" fullplot: "Theodore is a lonely man in the final stages of his divorce. When he's…" imdb: Object year: 2013 SCORE: 1 _id: "573a13dcf29313caabdb107a" plot: "An adrenaline junkie walks away from a whirlwind romance and embraces …" genres: Array runtime: 146
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
1 [ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "wildcard": { 6 "path": "plot", 7 "query": "*new* pur*" 8 } 9 } 10 } 11 ]
SCORE: 1 _id: "573a1397f29313caabce77d9" fullplot: "After the Rebel base on the icy planet Hoth is taken over by the empir…" imdb: Object year: 1980 SCORE: 1 _id: "573a1398f29313caabceb893" plot: "The new owner of the Cleveland Indians puts together a purposely horri…" genres: Array runtime: 107 SCORE: 1 _id: "573a13b1f29313caabd37ae6" plot: "The true story of Richard Pimentel, a brilliant public speaker with a …" genres: Array runtime: 94 SCORE: 1 _id: "573a13d1f29313caabd8e209" fullplot: "Theodore is a lonely man in the final stages of his divorce. When he's…" imdb: Object year: 2013 SCORE: 1 _id: "573a13dcf29313caabdb107a" plot: "An adrenaline junkie walks away from a whirlwind romance and embraces …" genres: Array runtime: 146
展开查询结果。
Search Tester 可能不会显示其所返回文档的所有字段。要查看所有字段,包括在查询路径中指定的字段,请展开结果中的文档。
通过mongosh
连接到您的集群。
在终端窗口中打开mongosh
并连接到集群。 有关连接的详细说明,请参阅通过mongosh
连接。
使用sample_mflix
数据库。
在 mongosh
提示符下运行以下命令:
use sample_mflix
使用您为其创建索引的操作符运行以下 Atlas Search 查询。
以下查询使用该操作符查询 sample_mflix.movies
集合的 plot
字段。该查询包括:
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "autocomplete": { 6 "path": "plot", 7 "query": "new purchase", 8 "tokenOrder": "any", 9 "fuzzy": { 10 "maxEdits": 2, 11 "prefixLength": 1, 12 "maxExpansions": 256 13 } 14 }, 15 "highlight": { 16 "path": "plot" 17 } 18 } 19 }, 20 { 21 "$limit": 5 22 }, 23 { 24 "$project": { 25 "_id": 0, 26 "title": 1, 27 "plot": 1, 28 "highlights": { "$meta": "searchHighlights" } 29 } 30 } 31 ])
[ { plot: "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.", title: 'Panic Room', highlights: [ { score: 4.364492893218994, path: 'plot', texts: [ { value: 'A divorced woman and her diabetic daughter take refuge in their ', type: 'text' }, { value: "newly-purchased house's safe", type: 'hit' }, { value: ' room, when three men break-in, searching for a missing fortune.', type: 'text' } ] } ] }, { plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", title: 'Her', highlights: [ { score: 4.198050022125244, path: 'plot', texts: [ { value: 'A lonely writer develops an unlikely relationship with his ', type: 'text' }, { value: 'newly purchased operating system', type: 'hit' }, { value: " that's designed to meet his every ", type: 'text' }, { value: 'need', type: 'hit' }, { value: '.', type: 'text' } ] } ] }, { plot: "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.", title: 'Repo Men', highlights: [ { score: 2.6448397636413574, path: 'plot', texts: [ { value: 'Set in the ', type: 'text' }, { value: 'near future when', type: 'hit' }, { value: ' artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has ', type: 'text' }, { value: 'purchased. He must', type: 'hit' } ] } ] }, { plot: 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.', title: 'Punch-Drunk Love', highlights: [ { score: 1.2451990842819214, path: 'plot', texts: [ { value: 'A psychologically troubled ', type: 'text' }, { value: 'novelty supplier is', type: 'hit' }, { value: ' ', type: 'text' }, { value: 'nudged towards a', type: 'hit' }, { value: ' romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and ', type: 'text' }, { value: 'purchasing stunning amounts', type: 'hit' }, { value: ' of pudding.', type: 'text' } ] } ] }, { plot: 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.', title: 'The Condemned', highlights: [ { score: 2.94378924369812, path: 'plot', texts: [ { value: 'He is "', type: 'text' }, { value: 'purchased" by a', type: 'hit' }, { value: ' wealthy television producer and taken to a desolate island where he must fight to the death against ', type: 'text' }, { value: 'nine other condemned', type: 'hit' }, { value: ' killers from all corners of the world, with freedom going to the sole survivor.', type: 'text' } ] } ] } ]
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "phrase": { 6 "path": "plot", 7 "query": "new purpose", 8 "slop": 5 9 }, 10 "highlight": { 11 "path": "plot" 12 } 13 } 14 }, 15 { 16 "$limit": 5 17 }, 18 { 19 "$project": { 20 "_id": 0, 21 "plot": 1, 22 "title": 1, 23 "highlights": { "$meta": "searchHighlights" } 24 } 25 } 26 ])
[ { plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', title: 'Music Within', highlights: [ { score: 1.9394469261169434, path: 'plot', texts: [ { value: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a ', type: 'text' }, { value: 'new', type: 'hit' }, { value: ' ', type: 'text' }, { value: 'purpose', type: 'hit' }, { value: ' in his landmark efforts on the behalf of Americans with disabilities.', type: 'text' } ] } ] }, { plot: 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.', title: 'Megamind', highlights: [ { score: 2.90376877784729, path: 'plot', texts: [ { value: 'But without a hero, he loses all ', type: 'text' }, { value: 'purpose', type: 'hit' }, { value: ' and must find ', type: 'text' }, { value: 'new', type: 'hit' }, { value: ' meaning to his life.', type: 'text' } ] } ] }, { plot: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.', title: 'Pat Garrett & Billy the Kid', highlights: [ { score: 2.115748405456543, path: 'plot', texts: [ { value: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy ', type: 'text' }, { value: 'New', type: 'hit' }, { value: ' Mexico cattle barons--his sole ', type: 'text' }, { value: 'purpose', type: 'hit' }, { value: ' being to bring down his old friend Billy the Kid.', type: 'text' } ] } ] } ]
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "regex": { 6 "path": "plot", 7 "query": "(.*)new(.*) pur(.*)" 8 } 9 } 10 }, 11 { 12 $limit: 5 13 }, 14 { 15 $project: { 16 "_id": 0, 17 "plot": 1, 18 "title": 1 19 } 20 } 21 ])
[ { plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', title: 'Star Wars: Episode V - The Empire Strikes Back' }, { plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", title: 'Major League' }, { plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', title: 'Music Within' }, { plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", title: 'Her' }, { plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', title: 'Kick' } ]
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "partial-match-tutorial", 5 "wildcard": { 6 "path": "plot", 7 "query": "*new* pur*" 8 } 9 } 10 }, 11 { 12 "$limit": 5 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "plot": 1 18 } 19 } 20 ])
[ { plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', title: 'Star Wars: Episode V - The Empire Strikes Back' }, { plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", title: 'Major League' }, { plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', title: 'Music Within' }, { plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", title: 'Her' }, { plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', title: 'Kick' } ]
在 MongoDB Compass 中连接到您的集群。
打开 MongoDB Compass 并连接到您的集群。有关连接的详细说明,请参阅通过 Compass 连接。
使用您为其创建索引的操作符运行以下 Atlas Search 查询。
以下查询使用该操作符查询 sample_mflix.movies
集合的 plot
字段。该查询包括:
若要在 MongoDB Compass 中运行此查询:
单击 Aggregations 标签页。
单击 Select...,然后从下拉菜单中选择阶段并为该阶段添加查询,以配置以下每个管道阶段。单击 Add Stage 以添加其他阶段。
该查询允许执行以下操作,以将查询字符串
new purchase
与字段中的单词进行匹配:允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
管道阶段查询$search
{ "index": "partial-match-tutorial", "autocomplete": { "path": "plot", "query": "new purchase", "tokenOrder": "any", "fuzzy": { "maxEdits": 2, "prefixLength": 1, "maxExpansions": 256 } }, "highlight": { "path": "plot" } } $limit
5 $project
{ "_id": 0, "title": 1, "plot": 1, "highlights": { "$meta": "searchHighlights" } } 查询指定了查询字符串
new purpose
,其中new
和purpose
之间的位置距离最大为5
。管道阶段查询$search
{ "index": "partial-match-tutorial", "phrase": { "path": "plot", "query": "new purpose", "slop": 5 }, "highlight": { "path": "plot" } } $limit
5 $project
{ "_id": 0, "title": 1, "plot": 1, "highlights": { "$meta": "searchHighlights" } } 该查询使用
(.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。管道阶段查询$search
{ "index": "partial-match-tutorial", "regex": { "path": "plot", "query": "(.*)new(.*) pur(.*)" } } $limit
5 $project
{ "_id": 0, "title": 1, "plot": 1 } 查询使用查询字符串中的
*
来匹配部分查询字符串中指定单词前后的0
个或多个字符。管道阶段查询$search
{ "index": "partial-match-tutorial", "wildcard": { "path": "plot", "query": "*new* pur*" } } $limit
5 $project
{ "_id": 0, "title": 1, "plot": 1 }
如果启用了 Auto Preview,MongoDB Compass 将在 $project
管道阶段旁边显示以下文档:
1 [ 2 { 3 plot: "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.", 4 title: 'Panic Room', 5 highlights: [ 6 { 7 score: 4.364492893218994, 8 path: 'plot', 9 texts: [ 10 { 11 value: 'A divorced woman and her diabetic daughter take refuge in their ', 12 type: 'text' 13 }, 14 { value: "newly-purchased house's safe", type: 'hit' }, 15 { 16 value: ' room, when three men break-in, searching for a missing fortune.', 17 type: 'text' 18 } 19 ] 20 } 21 ] 22 }, 23 { 24 plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", 25 title: 'Her', 26 highlights: [ 27 { 28 score: 4.198050022125244, 29 path: 'plot', 30 texts: [ 31 { 32 value: 'A lonely writer develops an unlikely relationship with his ', 33 type: 'text' 34 }, 35 { value: 'newly purchased operating system', type: 'hit' }, 36 { 37 value: " that's designed to meet his every ", 38 type: 'text' 39 }, 40 { value: 'need', type: 'hit' }, 41 { value: '.', type: 'text' } 42 ] 43 } 44 ] 45 }, 46 { 47 plot: "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.", 48 title: 'Repo Men', 49 highlights: [ 50 { 51 score: 2.6448397636413574, 52 path: 'plot', 53 texts: [ 54 { value: 'Set in the ', type: 'text' }, 55 { value: 'near future when', type: 'hit' }, 56 { value: ' artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has ', type: 'text' }, 57 { value: 'purchased. He must', type: 'hit' } 58 ] 59 } 60 ] 61 }, 62 { 63 plot: 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.', 64 title: 'Punch-Drunk Love', 65 highlights: [ 66 { 67 score: 1.2451990842819214, 68 path: 'plot', 69 texts: [ 70 { value: 'A psychologically troubled ', type: 'text' }, 71 { value: 'novelty supplier is', type: 'hit' }, 72 { value: ' ', type: 'text' }, 73 { value: 'nudged towards a', type: 'hit' }, 74 { 75 value: ' romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and ', 76 type: 'text' 77 }, 78 { value: 'purchasing stunning amounts', type: 'hit' }, 79 { value: ' of pudding.', type: 'text' } 80 ] 81 } 82 ] 83 }, 84 { 85 plot: 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.', 86 title: 'The Condemned', 87 highlights: [ 88 { 89 score: 2.94378924369812, 90 path: 'plot', 91 texts: [ 92 { value: 'He is "', type: 'text' }, 93 { value: 'purchased" by a', type: 'hit' }, 94 { 95 value: ' wealthy television producer and taken to a desolate island where he must fight to the death against ', 96 type: 'text' 97 }, 98 { value: 'nine other condemned', type: 'hit' }, 99 { 100 value: ' killers from all corners of the world, with freedom going to the sole survivor.', 101 type: 'text' 102 } 103 ] 104 } 105 ] 106 } 107 ]
1 [ 2 { 3 plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', 4 title: 'Music Within', 5 highlights: [ 6 { 7 score: 1.9394469261169434, 8 path: 'plot', 9 texts: [ 10 { value: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a ', type: 'text' }, 11 { value: 'new', type: 'hit' }, 12 { value: ' ', type: 'text' }, 13 { value: 'purpose', type: 'hit' }, 14 { value: ' in his landmark efforts on the behalf of Americans with disabilities.', type: 'text' } 15 ] 16 } 17 ] 18 }, 19 { 20 plot: 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.', 21 title: 'Megamind', 22 highlights: [ 23 { 24 score: 2.90376877784729, 25 path: 'plot', 26 texts: [ 27 { value: 'But without a hero, he loses all ', type: 'text' }, 28 { value: 'purpose', type: 'hit' }, 29 { value: ' and must find ', type: 'text' }, 30 { value: 'new', type: 'hit' }, 31 { value: ' meaning to his life.', type: 'text' } 32 ] 33 } 34 ] 35 }, 36 { 37 plot: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.', 38 title: 'Pat Garrett & Billy the Kid', 39 highlights: [ 40 { 41 score: 2.115748405456543, 42 path: 'plot', 43 texts: [ 44 { value: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy ', type: 'text' }, 45 { value: 'New', type: 'hit' }, 46 { value: ' Mexico cattle barons--his sole ', type: 'text' }, 47 { value: 'purpose', type: 'hit' }, 48 { value: ' being to bring down his old friend Billy the Kid.', type: 'text' } 49 ] 50 } 51 ] 52 } 53 ]
1 [ 2 { 3 plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', 4 title: 'Star Wars: Episode V - The Empire Strikes Back' 5 }, 6 { 7 plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", 8 title: 'Major League' 9 }, 10 { 11 plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', 12 title: 'Music Within' 13 }, 14 { 15 plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", 16 title: 'Her' 17 }, 18 { 19 plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', 20 title: 'Kick' 21 } 22 ]
1 [ 2 { 3 plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', 4 title: 'Star Wars: Episode V - The Empire Strikes Back' 5 }, 6 { 7 plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", 8 title: 'Major League' 9 }, 10 { 11 plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', 12 title: 'Music Within' 13 }, 14 { 15 plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", 16 title: 'Her' 17 }, 18 { 19 plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', 20 title: 'Kick' 21 } 22 ]
在Program.cs
文件中创建查询。
将
Program.cs
文件的内容替换为以下代码。此代码示例将执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
运行使用以下项的查询:
遍历游标以打印与查询匹配的文档。
该查询允许执行以下操作,以将查询字符串
new purchase
与字段中的单词进行匹配:允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class PartialAutocomplete 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) { 12 // allow automapping of the camelCase database fields to our MovieDocument 13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 15 16 // connect to your Atlas cluster 17 var mongoClient = new MongoClient(MongoConnectionString); 18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix"); 19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies"); 20 21 // define fuzzy options 22 SearchFuzzyOptions fuzzyOptions = new SearchFuzzyOptions() 23 { 24 MaxEdits = 2, 25 PrefixLength = 1, 26 MaxExpansions = 256 27 }; 28 29 // define and run pipeline 30 var results = moviesCollection.Aggregate() 31 .Search(Builders<MovieDocument>.Search.Autocomplete(movie => movie.Plot, "new purchase", SearchAutocompleteTokenOrder.Any, fuzzy: fuzzyOptions), new SearchHighlightOptions<MovieDocument>(movie => movie.Plot), 32 indexName: "partial-match-tutorial") 33 .Project<MovieDocument>(Builders<MovieDocument>.Projection 34 .Include(movie => movie.Plot) 35 .Include(movie => movie.Title) 36 .Exclude(movie => movie.Id) 37 .MetaSearchHighlights("highlights")) 38 .Limit(5) 39 .ToList(); 40 41 // print results 42 foreach (var movie in results) { 43 Console.WriteLine(movie.ToJson()); 44 } 45 } 46 } 47 48 [ ]49 public class MovieDocument { 50 [ ]51 public ObjectId Id { get; set; } 52 public string Plot { get; set; } 53 public string Title { get; set; } 54 [ ]55 public List<SearchHighlight> Highlights { get; set; } 56 } 查询指定了查询字符串
new purpose
,其中new
和purpose
之间的位置距离最大为5
。1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class PartialPhrase 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) { 12 // allow automapping of the camelCase database fields to our MovieDocument 13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 15 16 // connect to your Atlas cluster 17 var mongoClient = new MongoClient(MongoConnectionString); 18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix"); 19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies"); 20 21 // define and run pipeline 22 var results = moviesCollection.Aggregate() 23 .Search(Builders<MovieDocument>.Search.Phrase(movie => movie.Plot, "new purpose", 5), new SearchHighlightOptions<MovieDocument>(movie => movie.Plot), 24 indexName: "partial-match-tutorial") 25 .Project<MovieDocument>(Builders<MovieDocument>.Projection 26 .Include(movie => movie.Plot) 27 .Include(movie => movie.Title) 28 .Exclude(movie => movie.Id) 29 .MetaSearchHighlights("highlights")) 30 .Limit(5) 31 .ToList(); 32 33 // print results 34 foreach (var movie in results) { 35 Console.WriteLine(movie.ToJson()); 36 } 37 } 38 } 39 40 [ ]41 public class MovieDocument { 42 [ ]43 public ObjectId Id { get; set; } 44 public string Plot { get; set; } 45 public string Title { get; set; } 46 [ ]47 public List<SearchHighlight> Highlights { get; set; } 48 } 该查询使用
(.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class PartialRegex 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) { 12 // allow automapping of the camelCase database fields to our MovieDocument 13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 15 16 // connect to your Atlas cluster 17 var mongoClient = new MongoClient(MongoConnectionString); 18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix"); 19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies"); 20 21 // define and run pipeline 22 var results = moviesCollection.Aggregate() 23 .Search(Builders<MovieDocument>.Search.Regex(movie => movie.Plot, "(.*)new(.*) pur(.*)"), 24 indexName: "partial-match-tutorial") 25 .Project<MovieDocument>(Builders<MovieDocument>.Projection 26 .Include(movie => movie.Plot) 27 .Include(movie => movie.Title) 28 .Exclude(movie => movie.Id)) 29 .Limit(5) 30 .ToList(); 31 32 // print results 33 foreach (var movie in results) { 34 Console.WriteLine(movie.ToJson()); 35 } 36 } 37 } 38 39 [ ]40 public class MovieDocument { 41 [ ]42 public ObjectId Id { get; set; } 43 public string Plot { get; set; } 44 public string Title { get; set; } 45 } 查询使用查询字符串中的
*
来匹配部分查询字符串中指定单词前后的0
个或多个字符。1 using MongoDB.Bson; 2 using MongoDB.Bson.Serialization.Attributes; 3 using MongoDB.Bson.Serialization.Conventions; 4 using MongoDB.Driver; 5 using MongoDB.Driver.Search; 6 7 public class PartialWildcard 8 { 9 private const string MongoConnectionString = "<connection-string>"; 10 11 public static void Main(string[] args) { 12 // allow automapping of the camelCase database fields to our MovieDocument 13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; 14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true); 15 16 // connect to your Atlas cluster 17 var mongoClient = new MongoClient(MongoConnectionString); 18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix"); 19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies"); 20 21 // define and run pipeline 22 var results = moviesCollection.Aggregate() 23 .Search(Builders<MovieDocument>.Search.Wildcard(movie => movie.Plot, "*new* pur*"), 24 indexName: "partial-match-tutorial") 25 .Project<MovieDocument>(Builders<MovieDocument>.Projection 26 .Include(movie => movie.Plot) 27 .Include(movie => movie.Title) 28 .Exclude(movie => movie.Id)) 29 .Limit(5) 30 .ToList(); 31 32 // print results 33 foreach (var movie in results) { 34 Console.WriteLine(movie.ToJson()); 35 } 36 } 37 } 38 39 [ ]40 public class MovieDocument { 41 [ ]42 public ObjectId Id { get; set; } 43 public string Plot { get; set; } 44 public string Title { get; set; } 45 } 在运行示例之前,请将
<connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。
编译并运行Program.cs
文件。
dotnet run partial-match-example.csproj
{ "plot" : "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.", "title" : "Panic Room", "highlights" : [{ "path" : "plot", "score" : 4.3644928932189941, "texts" : [ { "type" : "Text", "value" : "A divorced woman and her diabetic daughter take refuge in their " }, { "type" : "Hit", "value" : "newly-purchased house's safe" }, { "type" : "Text", "value" : " room, when three men break-in, searching for a missing fortune." }] }] } { "plot" : "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", "title" : "Her", "highlights" : [{ "path" : "plot", "score" : 4.1980500221252441, "texts" : [ { "type" : "Text", "value" : "A lonely writer develops an unlikely relationship with his " }, { "type" : "Hit", "value" : "newly purchased operating system" }, { "type" : "Text", "value" : " that's designed to meet his every " }, { "type" : "Hit", "value" : "need" }, { "type" : "Text", "value" : "." }] }] } { "plot" : "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.", "title" : "Repo Men", "highlights" : [{ "path" : "plot", "score" : 2.6448397636413574, "texts" : [ { "type" : "Text", "value" : "Set in the " }, { "type" : "Hit", "value" : "near future when" }, { "type" : "Text", "value" : " artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has " }, { "type" : "Hit", "value" : "purchased. He must" }] }] } { "plot" : "A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.", "title" : "Punch-Drunk Love", "highlights" : [{ "path" : "plot", "score" : 1.2451990842819214, "texts" : [ { "type" : "Text", "value" : "A psychologically troubled " }, { "type" : "Hit", "value" : "novelty supplier is" }, { "type" : "Text", "value" : " " }, { "type" : "Hit", "value" : "nudged towards a" }, { "type" : "Text", "value" : " romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and " }, { "type" : "Hit", "value" : "purchasing stunning amounts" }, { "type" : "Text", "value" : " of pudding." }] }] } { "plot" : "Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is \"purchased\" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.", "title" : "The Condemned", "highlights" : [{ "path" : "plot", "score" : 2.9437892436981201, "texts" : [ { "type" : "Text", "value" : "He is \"" }, { "type" : "Hit", "value" : "purchased\" by a" }, { "type" : "Text", "value" : " wealthy television producer and taken to a desolate island where he must fight to the death against " }, { "type" : "Hit", "value" : "nine other condemned" }, { "type" : "Text", "value" : " killers from all corners of the world, with freedom going to the sole survivor." }] }] }
dotnet run partial-match-example.csproj
{ "plot" : "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.", "title" : "Music Within", "highlights" : [{ "path" : "plot", "score" : 1.9394469261169434, "texts" : [ { "type" : "Text", "value" : "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a " }, { "type" : "Hit", "value" : "new" }, { "type" : "Text", "value" : " " }, { "type" : "Hit", "value" : "purpose" }, { "type" : "Text", "value" : " in his landmark efforts on the behalf of Americans with disabilities." }] }] } { "plot" : "The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.", "title" : "Megamind", "highlights" : [{ "path" : "plot", "score" : 2.90376877784729, "texts" : [ { "type" : "Text", "value" : "But without a hero, he loses all " }, { "type" : "Hit", "value" : "purpose" }, { "type" : "Text", "value" : " and must find " }, { "type" : "Hit", "value" : "new" }, { "type" : "Text", "value" : " meaning to his life." }] }] } { "plot" : "An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.", "title" : "Pat Garrett & Billy the Kid", "highlights" : [{ "path" : "plot", "score" : 2.115748405456543, "texts" : [ { "type" : "Text", "value" : "An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy " }, { "type" : "Hit", "value" : "New" }, { "type" : "Text", "value" : " Mexico cattle barons--his sole " }, { "type" : "Hit", "value" : "purpose" }, { "type" : "Text", "value" : " being to bring down his old friend Billy the Kid." }] }] }
dotnet run partial-match-example.csproj
{ "plot" : "After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.", "title" : "Star Wars: Episode V - The Empire Strikes Back" } { "plot" : "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", "title" : "Major League" } { "plot" : "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.", "title" : "Music Within" } { "plot" : "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", "title" : "Her" } { "plot" : "An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.", "title" : "Kick" }
dotnet run partial-match-example.csproj
{ "plot" : "After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.", "title" : "Star Wars: Episode V - The Empire Strikes Back" } { "plot" : "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", "title" : "Major League" } { "plot" : "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.", "title" : "Music Within" } { "plot" : "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", "title" : "Her" } { "plot" : "An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.", "title" : "Kick" }
将您为其创建索引的操作符的代码复制并粘贴到partial-match-query.go
文件中。
以下查询使用该操作符查询 sample_mflix.movies
集合的 plot
字段。该查询包括:
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
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 plot string `bson:"Plot,omitempty"` 17 } 18 19 func main() { 20 var err error 21 // connect to the Atlas cluster 22 ctx := context.Background() 23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 24 if err != nil { 25 panic(err) 26 } 27 defer client.Disconnect(ctx) 28 // set namespace 29 collection := client.Database("sample_mflix").Collection("movies") 30 // define pipeline 31 searchStage := bson.D{{"$search", bson.M{ 32 "index": "partial-match-tutorial", 33 "autocomplete": bson.M{ 34 "path": "plot", "query": "new purchase", "tokenOrder": "any", "fuzzy": bson.M{ 35 "maxEdits": 2, "prefixLength": 1, "maxExpansions": 256}, 36 }, 37 "highlight": bson.D{ 38 {"path", "plot"}, 39 }, 40 }}} 41 limitStage := bson.D{{"$limit", 5}} 42 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}, {"highlights", bson.D{{"$meta", "searchHighlights"}}}}}} 43 // specify the amount of time the operation can run on the server 44 opts := options.Aggregate().SetMaxTime(5 * time.Second) 45 // run pipeline 46 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 47 if err != nil { 48 panic(err) 49 } 50 // print results 51 var results []bson.D 52 if err = cursor.All(context.TODO(), &results); err != nil { 53 panic(err) 54 } 55 for _, result := range results { 56 fmt.Println(result) 57 } 58 }
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
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 plot string `bson:"Plot,omitempty"` 17 } 18 19 func main() { 20 var err error 21 // connect to the Atlas cluster 22 ctx := context.Background() 23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 24 if err != nil { 25 panic(err) 26 } 27 defer client.Disconnect(ctx) 28 // set namespace 29 collection := client.Database("sample_mflix").Collection("movies") 30 // define pipeline 31 searchStage := bson.D{{"$search", bson.M{ 32 "index": "partial-match-tutorial", 33 "phrase": bson.D{{"path", "plot"}, {"query", "new purpose"}, {"slop", 5}}, 34 "highlight": bson.D{{"path", "plot"}}, 35 }}} 36 limitStage := bson.D{{"$limit", 5}} 37 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}, {"highlights", bson.D{{"$meta", "searchHighlights"}}}}}} 38 // specify the amount of time the operation can run on the server 39 opts := options.Aggregate().SetMaxTime(5 * time.Second) 40 // run pipeline 41 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 42 if err != nil { 43 panic(err) 44 } 45 // print results 46 var results []bson.D 47 if err = cursor.All(context.TODO(), &results); err != nil { 48 panic(err) 49 } 50 for _, result := range results { 51 fmt.Println(result) 52 } 53 }
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
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 plot string `bson:"Plot,omitempty"` 17 } 18 19 func main() { 20 var err error 21 // connect to the Atlas cluster 22 ctx := context.Background() 23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 24 if err != nil { 25 panic(err) 26 } 27 defer client.Disconnect(ctx) 28 // set namespace 29 collection := client.Database("sample_mflix").Collection("movies") 30 // define pipeline 31 searchStage := bson.D{{"$search", bson.M{ 32 "index": "partial-match-tutorial", 33 "regex": bson.D{{"path", "plot"}, {"query", "(.*)new(.*) pur(.*)"}}, 34 }}} 35 limitStage := bson.D{{"$limit", 5}} 36 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}}}} 37 // specify the amount of time the operation can run on the server 38 opts := options.Aggregate().SetMaxTime(5 * time.Second) 39 // run pipeline 40 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 41 if err != nil { 42 panic(err) 43 } 44 // print results 45 var results []bson.D 46 if err = cursor.All(context.TODO(), &results); err != nil { 47 panic(err) 48 } 49 for _, result := range results { 50 fmt.Println(result) 51 } 52 }
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
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 plot string `bson:"Plot,omitempty"` 17 } 18 19 func main() { 20 var err error 21 // connect to the Atlas cluster 22 ctx := context.Background() 23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 24 if err != nil { 25 panic(err) 26 } 27 defer client.Disconnect(ctx) 28 // set namespace 29 collection := client.Database("sample_mflix").Collection("movies") 30 // define pipeline 31 searchStage := bson.D{{"$search", bson.M{ 32 "index": "partial-match-tutorial", 33 "wildcard": bson.D{{"path", "plot"}, {"query", "*new* pur*"}}, 34 }}} 35 limitStage := bson.D{{"$limit", 5}} 36 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}}}} 37 // specify the amount of time the operation can run on the server 38 opts := options.Aggregate().SetMaxTime(5 * time.Second) 39 // run pipeline 40 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 41 if err != nil { 42 panic(err) 43 } 44 // print results 45 var results []bson.D 46 if err = cursor.All(context.TODO(), &results); err != nil { 47 panic(err) 48 } 49 for _, result := range results { 50 fmt.Println(result) 51 } 52 }
注意
在运行示例之前,请将 <connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。
运行以下命令以查询集合
go run partial-match-query.go
[ {plot A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.} {title Panic Room} {highlights [ [ {score 4.364492893218994} {path plot} {texts [ [{value A divorced woman and her diabetic daughter take refuge in their } {type text}] [{value newly-purchased house's safe} {type hit}] [{value room, when three men break-in, searching for a missing fortune.} {type text}] ]} ] ]} ] [ {plot A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.} {title Her} {highlights [ [ {score 4.198050022125244} {path plot} {texts [ [{value A lonely writer develops an unlikely relationship with his } {type text}] [{value newly purchased operating system} {type hit}] [{value that's designed to meet his every } {type text}] [{value need} {type hit}] [{value .} {type text}] ]} ] ]} ] [ {plot Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.} {title Repo Men} {highlights [ [ {score 2.6448397636413574} {path plot} {texts [ [{value Set in the } {type text}] [{value near future when} {type hit}] [{value artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has } {type text}] [{value purchased. He must} {type hit}] ]} ] ]} ] [ {plot A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.} {title Punch-Drunk Love} {highlights [ [ {score 1.2451990842819214} {path plot} {texts [ [{value A psychologically troubled } {type text}] [{value novelty supplier is} {type hit}] [{value } {type text}] [{value nudged towards a} {type hit}] [{value romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and } {type text}] [{value purchasing stunning amounts} {type hit}] [{value of pudding.} {type text}] ]} ] ]} ] [ {plot Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.} {title The Condemned} {highlights [ [ {score 2.94378924369812} {path plot} {texts [ [{value He is "} {type text}] [{value purchased" by a} {type hit}] [{value wealthy television producer and taken to a desolate island where he must fight to the death against } {type text}] [{value nine other condemned} {type hit}] [{value killers from all corners of the world, with freedom going to the sole survivor.} {type text}] ]} ] ]} ]
go run partial-match-query.go
[ {plot The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.} {title Music Within} {highlights [[ {score 1.9394469261169434} {path plot} {texts [ [{value The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a } {type text}] [{value new} {type hit}] [{value } {type text}] [{value purpose} {type hit}] [{value in his landmark efforts on the behalf of Americans with disabilities.} {type text} ] ]} ]]} ] [ {plot The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.} {title Megamind} {highlights [[ {score 2.90376877784729} {path plot} {texts [ [{value But without a hero, he loses all } {type text}] [{value purpose} {type hit}] [{value and must find } {type text}] [{value new} {type hit}] [{value meaning to his life.} {type text}] ]} ]]} ] [ {plot An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.} {title Pat Garrett & Billy the Kid} {highlights [[ {score 2.115748405456543} {path plot} {texts [ [{value An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy } {type text}] [{value New} {type hit}] [{value Mexico cattle barons--his sole } {type text}] [{value purpose} {type hit}] [{value being to bring down his old friend Billy the Kid.} {type text}] ]} ]]} ]
go run partial-match-query.go
[ {plot After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.} {title Star Wars: Episode V - The Empire Strikes Back} ] [ {plot The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.} {title Major League} ] [ {plot The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.} {title Music Within} ] [ {plot A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.} {title Her} ] [ {plot An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.} {title Kick} ]
go run partial-match-query.go
[ {plot After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.} {title Star Wars: Episode V - The Empire Strikes Back} ] [ {plot The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.} {title Major League} ] [ {plot The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.} {title Music Within} ] [ {plot A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.} {title Her} ] [ {plot An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.} {title Kick} ]
将您为其创建索引的操作符的代码复制并粘贴到PartialMatchQuery.java
文件中。
此代码示例将执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
运行使用以下项的查询:
遍历游标以打印与查询匹配的文档。
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Aggregates.limit; 3 import static com.mongodb.client.model.Aggregates.project; 4 import static com.mongodb.client.model.Projections.excludeId; 5 import static com.mongodb.client.model.Projections.fields; 6 import static com.mongodb.client.model.Projections.include; 7 import com.mongodb.client.MongoClient; 8 import com.mongodb.client.MongoClients; 9 import com.mongodb.client.MongoCollection; 10 import com.mongodb.client.MongoDatabase; 11 import org.bson.Document; 12 13 public class PartialMatchQuery { 14 public static void main( String[] args ) { 15 16 // define query 17 Document agg = new Document("$search", 18 new Document ("index", "partial-match-tutorial") 19 .append("autocomplete", 20 new Document("path", "plot") 21 .append("query", "new purchase") 22 .append("tokenOrder", "any") 23 .append("fuzzy", 24 new Document("maxEdits", 2) 25 .append("prefixLength", 1) 26 .append("maxExpansions", 256)))); 27 28 // specify connection 29 String uri = "<connection-string>"; 30 31 // establish connection and set namespace 32 try (MongoClient mongoClient = MongoClients.create(uri)) { 33 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 34 MongoCollection<Document> collection = database.getCollection("movies"); 35 // run query and print results 36 collection.aggregate(Arrays.asList(agg, 37 limit(5), 38 project(fields(excludeId(), include("title", "plot"))))) 39 .forEach(doc -> System.out.println(doc.toJson())); 40 } 41 } 42 }
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
1 import java.util.Arrays; 2 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 com.mongodb.client.MongoClient; 9 import com.mongodb.client.MongoClients; 10 import com.mongodb.client.MongoCollection; 11 import com.mongodb.client.MongoDatabase; 12 import org.bson.Document; 13 14 public class PartialMatchQuery { 15 public static void main( String[] args ) { 16 // define query 17 Document agg = new Document("$search", 18 new Document("index", "partial-match-tutorial") 19 .append("phrase", 20 new Document("path", "plot") 21 .append("query", "new purpose") 22 .append("slop", 5))); 23 24 // specify connection 25 String uri = "<connection-string>"; 26 27 // establish connection and set namespace 28 try (MongoClient mongoClient = MongoClients.create(uri)) { 29 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 30 MongoCollection<Document> collection = database.getCollection("movies"); 31 32 // run query and print results 33 collection.aggregate(Arrays.asList(agg, 34 limit(5), 35 project(fields(excludeId(), include("title", "plot"))))) 36 .forEach(doc -> System.out.println(doc.toJson())); 37 } 38 } 39 }
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
1 import java.util.Arrays; 2 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 com.mongodb.client.MongoClient; 9 import com.mongodb.client.MongoClients; 10 import com.mongodb.client.MongoCollection; 11 import com.mongodb.client.MongoDatabase; 12 import org.bson.Document; 13 14 public class PartialMatchQuery { 15 public static void main( String[] args ) { 16 // define query 17 Document agg = new Document("$search", 18 new Document ("index", "partial-match-tutorial") 19 .append("regex", 20 new Document("path", "plot") 21 .append("query", "(.*)new(.*) pur(.*)"))); 22 // specify connection 23 String uri = "<connection-string>"; 24 // establish connection and set namespace 25 try (MongoClient mongoClient = MongoClients.create(uri)) { 26 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 27 MongoCollection<Document> collection = database.getCollection("movies"); 28 // run query and print results 29 collection.aggregate(Arrays.asList(agg, 30 limit(5), 31 project(fields(excludeId(), include("title", "plot"))))) 32 .forEach(doc -> System.out.println(doc.toJson())); 33 } 34 } 35 }
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
1 import java.util.Arrays; 2 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 com.mongodb.client.MongoClient; 9 import com.mongodb.client.MongoClients; 10 import com.mongodb.client.MongoCollection; 11 import com.mongodb.client.MongoDatabase; 12 import org.bson.Document; 13 14 public class PartialMatchQuery { 15 public static void main( String[] args ) { 16 // define query 17 Document agg = new Document("$search", 18 new Document ("index", "partial-match-tutorial") 19 .append("wildcard", 20 new Document("path", "plot") 21 .append("query", "*new* pur*"))); 22 // specify connection 23 String uri = "<connection-string>"; 24 // establish connection and set namespace 25 try (MongoClient mongoClient = MongoClients.create(uri)) { 26 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 27 MongoCollection<Document> collection = database.getCollection("movies"); 28 // run query and print results 29 collection.aggregate(Arrays.asList(agg, 30 limit(5), 31 project(fields(excludeId(), include("title", "plot"))))) 32 .forEach(doc -> System.out.println(doc.toJson())); 33 } 34 } 35 }
注意
要在 Maven 环境中运行示例代码,请在文件中的 import 语句上方添加以下内容。
package com.mongodb.drivers;
在运行示例之前,请将 <connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。
编译并运行PartialMatchQuery.java
文件。
javac PartialMatchQuery.java java PartialMatchQuery
{ "plot": "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.", "title": "Panic Room" } { "plot": "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", "title": "Her" } { "plot": "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.", "title": "Repo Men" } { "plot": "A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.", "title": "Punch-Drunk Love" } { "plot": "Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is \"purchased\" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.", "title": "The Condemned" }
javac PartialMatchQuery.java java PartialMatchQuery
{ "plot": "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.", "title": "Music Within" } { "plot": "The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.", "title": "Megamind" } { "plot": "An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.", "title": "Pat Garrett & Billy the Kid" }
javac PartialMatchQuery.java java PartialMatchQuery
{ "plot": "After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.", "title": "Star Wars: Episode V - The Empire Strikes Back" } { "plot": "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", "title": "Major League" } { "plot": "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.", "title": "Music Within" } { "plot": "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", "title": "Her" } { "plot": "An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.", "title": "Kick" }
javac PartialMatchQuery.java java PartialMatchQuery
{ "plot": "After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.", "title": "Star Wars: Episode V - The Empire Strikes Back" } { "plot": "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", "title": "Major League" } { "plot": "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.", "title": "Music Within" } { "plot": "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", "title": "Her" } { "plot": "An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.", "title": "Kick" }
将您为其创建索引的操作符的代码复制并粘贴到PartialMatchQuery.kt
文件中。
此代码示例将执行以下任务:
导入
mongodb
包和依赖项。建立与您的 Atlas 集群的连接。
运行使用以下项的查询:
打印与
AggregateFlow
实例中的查询相匹配的文档。
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
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", "partial-match-tutorial") 20 .append( 21 "autocomplete", 22 Document("path", "plot") 23 .append("query", "new purchase") 24 .append("tokenOrder", "any") 25 .append( 26 "fuzzy", 27 Document("maxEdits", 2) 28 .append("prefixLength", 1) 29 .append("maxExpansions", 256) 30 ) 31 ) 32 ) 33 34 // run query and print results 35 val resultsFlow = collection.aggregate<Document>( 36 listOf( 37 agg, 38 limit(5), 39 project(fields(excludeId(), include("title", "plot"))) 40 ) 41 ) 42 resultsFlow.collect { println(it) } 43 } 44 mongoClient.close() 45 }
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
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", "partial-match-tutorial") 20 .append( 21 "phrase", 22 Document("path", "plot") 23 .append("query", "new purpose") 24 .append("slop", 5) 25 ) 26 ) 27 28 // run query and print results 29 val resultsFlow = collection.aggregate<Document>( 30 listOf( 31 agg, 32 limit(5), 33 project(fields(excludeId(), include("title", "plot"))) 34 ) 35 ) 36 resultsFlow.collect { println(it) } 37 } 38 mongoClient.close() 39 }
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
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", "partial-match-tutorial") 20 .append( 21 "regex", 22 Document("path", "plot") 23 .append("query", "(.*)new(.*) pur(.*)") 24 ) 25 ) 26 27 // run query and print results 28 val resultsFlow = collection.aggregate<Document>( 29 listOf( 30 agg, 31 limit(5), 32 project(fields(excludeId(), include("title", "plot"))) 33 ) 34 ) 35 resultsFlow.collect { println(it) } 36 } 37 mongoClient.close() 38 }
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
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", "partial-match-tutorial") 20 .append( 21 "wildcard", 22 Document("path", "plot") 23 .append("query", "*new* pur*") 24 ) 25 ) 26 27 // run query and print results 28 val resultsFlow = collection.aggregate<Document>( 29 listOf( 30 agg, 31 limit(5), 32 project(fields(excludeId(), include("title", "plot"))) 33 ) 34 ) 35 resultsFlow.collect { println(it) } 36 } 37 mongoClient.close() 38 }
在运行示例之前,请将 <connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。
运行PartialMatchQuery.kt
文件。
当你在 IDE 中运行 PartialMatchQuery.kt
程序时,它会打印以下文档:
Document{{plot=A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune., title=Panic Room}} Document{{plot=A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need., title=Her}} Document{{plot=A country boy becomes the head of a gang through the purchase of some lucky roses from an old lady. He and a singer at the gang's nightclub try to do a good deed for the old lady when her daughter comes to visit., title=Miracles - Mr. Canton and Lady Rose}} Document{{plot=A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding., title=Punch-Drunk Love}} Document{{plot=Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor., title=The Condemned}}
Document{{plot=The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities., title=Music Within}} Document{{plot=The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life., title=Megamind}} Document{{plot=An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid., title=Pat Garrett & Billy the Kid}}
Document{{plot=After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke., title=Star Wars: Episode V - The Empire Strikes Back}} Document{{plot=The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her., title=Major League}} Document{{plot=The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities., title=Music Within}} Document{{plot=A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need., title=Her}} Document{{plot=An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster., title=Kick}}
Document{{plot=After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke., title=Star Wars: Episode V - The Empire Strikes Back}} Document{{plot=The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her., title=Major League}} Document{{plot=The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities., title=Music Within}} Document{{plot=A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need., title=Her}} Document{{plot=An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster., title=Kick}}
将您为其创建索引的操作符的代码复制并粘贴到partial-match-query.js
文件中。
此代码示例将执行以下任务:
导入
mongodb
,即 MongoDB 的 Node.js 驱动程序。创建一个
MongoClient
类实例,以建立与 Atlas 集群的连接。运行使用以下项的查询:
遍历游标以打印与查询匹配的文档。
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'partial-match-tutorial', 8 'autocomplete': { 9 'path': 'plot', 10 'query': 'new purchase', 11 'tokenOrder': 'any', 12 'fuzzy': { 13 'maxEdits': 2, 14 'prefixLength': 1, 15 'maxExpansions': 256 16 } 17 }, 18 'highlight': { 19 'path': 'plot' 20 } 21 } 22 }, { 23 '$limit': 5 24 }, { 25 '$project': { 26 '_id': 0, 27 'title': 1, 28 'plot': 1, 29 'highlights': { 30 '$meta': 'searchHighlights' 31 } 32 } 33 } 34 ]; 35 36 MongoClient.connect( 37 "<connection-string>", 38 { useNewUrlParser: true, useUnifiedTopology: true }, 39 async function (connectErr, client) { 40 assert.equal(null, connectErr); 41 const coll = client.db("sample_mflix").collection("movies"); 42 let cursor = await coll.aggregate(agg); 43 await cursor.forEach((doc) => console.log(doc)); 44 client.close(); 45 } 46 );
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'partial-match-tutorial', 8 'phrase': { 9 'path': 'plot', 10 'query': 'new purpose', 11 'slop': 5 12 }, 13 'highlight': { 14 'path': 'plot' 15 } 16 } 17 }, { 18 '$limit': 5 19 }, { 20 '$project': { 21 '_id': 0, 22 'plot': 1, 23 'title': 1, 24 'highlights': { 25 '$meta': 'searchHighlights' 26 } 27 } 28 } 29 ]; 30 31 MongoClient.connect( 32 "<connection-string>", 33 { useNewUrlParser: true, useUnifiedTopology: true }, 34 async function (connectErr, client) { 35 assert.equal(null, connectErr); 36 const coll = client.db("sample_mflix").collection("movies"); 37 let cursor = await coll.aggregate(agg); 38 await cursor.forEach((doc) => console.log(doc)); 39 client.close(); 40 } 41 );
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'partial-match-tutorial', 8 'regex': { 9 'path': 'plot', 10 'query': '(.*)new(.*) pur(.*)' 11 } 12 } 13 }, { 14 '$limit': 5 15 }, { 16 '$project': { 17 '_id': 0, 18 'plot': 1, 19 'title': 1 20 } 21 } 22 ]; 23 24 MongoClient.connect( 25 "<connection-string>", 26 { useNewUrlParser: true, useUnifiedTopology: true }, 27 async function (connectErr, client) { 28 assert.equal(null, connectErr); 29 const coll = client.db("sample_mflix").collection("movies"); 30 let cursor = await coll.aggregate(agg); 31 await cursor.forEach((doc) => console.log(doc)); 32 client.close(); 33 } 34 );
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'partial-match-tutorial', 8 'wildcard': { 9 'path': 'plot', 10 'query': '*new* pur*' 11 } 12 } 13 }, { 14 '$limit': 5 15 }, { 16 '$project': { 17 '_id': 0, 18 'plot': 1, 19 'title': 1 20 } 21 } 22 ]; 23 24 MongoClient.connect( 25 "<connection-string>", 26 { useNewUrlParser: true, useUnifiedTopology: true }, 27 async function (connectErr, client) { 28 assert.equal(null, connectErr); 29 const coll = client.db("sample_mflix").collection("movies"); 30 let cursor = await coll.aggregate(agg); 31 await cursor.forEach((doc) => console.log(doc)); 32 client.close(); 33 } 34 );
注意
在运行示例之前,请将 <connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。
运行以下命令以查询集合。
node partial-match-query.js
{ plot: "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.", title: 'Panic Room', highlights: [ { score: 4.364492893218994, path: 'plot', texts: [Array] } ] } { plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", title: 'Her', highlights: [ { score: 4.198050022125244, path: 'plot', texts: [Array] } ] } { plot: "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.", title: 'Repo Men', highlights: [ { score: 2.6448397636413574, path: 'plot', texts: [Array] } ] } { plot: 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.', title: 'Punch-Drunk Love', highlights: [ { score: 1.2451990842819214, path: 'plot', texts: [Array] } ] } { plot: 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.', title: 'The Condemned', highlights: [ { score: 2.94378924369812, path: 'plot', texts: [Array] } ] }
node partial-match-query.js
{ plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', title: 'Music Within', highlights: [ { score: 1.9394469261169434, path: 'plot', texts: [Array] } ] } { plot: 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.', title: 'Megamind', highlights: [ { score: 2.90376877784729, path: 'plot', texts: [Array] } ] } { plot: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.', title: 'Pat Garrett & Billy the Kid', highlights: [ { score: 2.115748405456543, path: 'plot', texts: [Array] } ] }
node partial-match-query.js
{ plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', title: 'Star Wars: Episode V - The Empire Strikes Back' } { plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", title: 'Major League' } { plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', title: 'Music Within' } { plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", title: 'Her' } { plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', title: 'Kick' }
node partial-match-query.js
{ plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', title: 'Star Wars: Episode V - The Empire Strikes Back' } { plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", title: 'Major League' } { plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', title: 'Music Within' } { plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", title: 'Her' } { plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', title: 'Kick' }
将您为其创建索引的操作符的代码复制并粘贴到partial-match-query.py
文件中。
以下代码示例:
导入
pymongo
、MongoDB 的 Python 驱动程序和dns
模块,这是使用 DNS 种子列表连接字符串将pymongo
连接到Atlas
所必需的。创建一个
MongoClient
类实例,以建立与 Atlas 集群的连接。运行使用以下项的查询:
遍历游标以打印与查询匹配的文档。
该查询允许执行以下操作,以将查询字符串 new
purchase
与字段中的单词进行匹配:
允许单词
new
和purchase
出现在plot
字段的任何位置。允许查询字符串中的两个字符变体将查询与字段中的单词匹配,但不允许更改查询字符串中的第一个字符。
最多允许考虑 256 个相似词。
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': 'partial-match-tutorial', 9 'autocomplete': { 10 'path': 'plot', 11 'query': 'new purchase', 12 'tokenOrder': 'any', 13 'fuzzy': { 14 'maxEdits': 2, 15 'prefixLength': 1, 16 'maxExpansions': 256 17 } 18 }, 19 'highlight': { 20 'path': 'plot' 21 } 22 } 23 }, { 24 '$limit': 5 25 }, { 26 '$project': { 27 '_id': 0, 28 'title': 1, 29 'plot': 1, 30 'highlights': { 31 '$meta': 'searchHighlights' 32 } 33 } 34 } 35 ]) 36 37 for i in result: 38 print(i)
查询指定了查询字符串 new purpose
,其中 new
和 purpose
之间的位置距离最大为 5
。
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': 'partial-match-tutorial', 9 'phrase': { 10 'path': 'plot', 11 'query': 'new purpose', 12 'slop': 5 13 }, 14 'highlight': { 15 'path': 'plot' 16 } 17 } 18 }, { 19 '$limit': 5 20 }, { 21 '$project': { 22 '_id': 0, 23 'plot': 1, 24 'title': 1, 25 'highlights': { 26 '$meta': 'searchHighlights' 27 } 28 } 29 } 30 ]) 31 32 for i in result: 33 print(i)
该查询使用 (.*)
正则表达式将任意数量的字符与部分查询字符串进行匹配。
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': 'partial-match-tutorial', 9 'regex': { 10 'path': 'plot', 11 'query': '(.*)new(.*) pur(.*)' 12 } 13 } 14 }, { 15 '$limit': 5 16 }, { 17 '$project': { 18 '_id': 0, 19 'plot': 1, 20 'title': 1 21 } 22 } 23 ]) 24 25 for i in result: 26 print(i)
查询使用查询字符串中的 *
来匹配部分查询字符串中指定单词前后的 0
个或多个字符。
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': 'partial-match-tutorial', 9 'wildcard': { 10 'path': 'plot', 11 'query': '*new* pur*' 12 } 13 } 14 }, { 15 '$limit': 5 16 }, { 17 '$project': { 18 '_id': 0, 19 'plot': 1, 20 'title': 1 21 } 22 } 23 ]) 24 25 for i in result: 26 print(i)
注意
在运行示例之前,请将 <connection-string>
替换为 Atlas 连接字符串。确保您的连接字符串包含数据库用户的档案。要了解详情,请参阅通过驱动程序连接。
运行以下命令以查询集合。
python partial-match-query.py
{ 'plot': "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.", 'title': 'Panic Room', 'highlights': [{ 'score': 4.364492893218994, 'path': 'plot', 'texts': [ {'value': 'A divorced woman and her diabetic daughter take refuge in their ', 'type': 'text'}, {'value': "newly-purchased house's safe", 'type': 'hit'}, {'value': ' room, when three men break-in, searching for a missing fortune.', 'type': 'text'} ] }] } { 'plot': "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", 'title': 'Her', 'highlights': [{ 'score': 4.198050022125244, 'path': 'plot', 'texts': [ {'value': 'A lonely writer develops an unlikely relationship with his ', 'type': 'text'}, {'value': 'newly purchased operating system', 'type': 'hit'}, {'value': " that's designed to meet his every ", 'type': 'text'}, {'value': 'need', 'type': 'hit'}, {'value': '.', 'type': 'text'} ] }] } { 'plot': "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.", 'title': 'Repo Men', 'highlights': [{ 'score': 2.6448397636413574, 'path': 'plot', 'texts': [ {'value': 'Set in the ', 'type': 'text'}, {'value': 'near future when', 'type': 'hit'}, {'value': ' artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has ', 'type': 'text'}, {'value': 'purchased. He must', 'type': 'hit'} ] }] } { 'plot': 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.', 'title': 'Punch-Drunk Love', 'highlights': [{ 'score': 1.2451990842819214, 'path': 'plot', 'texts': [ {'value': 'A psychologically troubled ', 'type': 'text'}, {'value': 'novelty supplier is', 'type': 'hit'}, {'value': ' ', 'type': 'text'}, {'value': 'nudged towards a', 'type': 'hit'}, {'value': ' romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and ', 'type': 'text'}, {'value': 'purchasing stunning amounts', 'type': 'hit'}, {'value': ' of pudding.', 'type': 'text'} ] }] } { 'plot': 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.', 'title': 'The Condemned', 'highlights': [{ 'score': 2.94378924369812, 'path': 'plot', 'texts': [ {'value': 'He is "', 'type': 'text'}, {'value': 'purchased" by a', 'type': 'hit'}, {'value': ' wealthy television producer and taken to a desolate island where he must fight to the death against ', 'type': 'text'}, {'value': 'nine other condemned', 'type': 'hit'}, {'value': ' killers from all corners of the world, with freedom going to the sole survivor.', 'type': 'text'} ] }] }
python partial-match-query.py
{ 'plot': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', 'title': 'Music Within', 'highlights': [{ 'score': 1.9394469261169434, 'path': 'plot', 'texts': [ {'value': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a ', 'type': 'text'}, {'value': 'new', 'type': 'hit'}, {'value': ' ', 'type': 'text'}, {'value': 'purpose', 'type': 'hit'}, {'value': ' in his landmark efforts on the behalf of Americans with disabilities.', 'type': 'text'} ] }] } { 'plot': 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.', 'title': 'Megamind', 'highlights': [{ 'score': 2.90376877784729, 'path': 'plot', 'texts': [ {'value': 'But without a hero, he loses all ', 'type': 'text'}, {'value': 'purpose', 'type': 'hit'}, {'value': ' and must find ', 'type': 'text'}, {'value': 'new', 'type': 'hit'}, {'value': ' meaning to his life.', 'type': 'text'} ] }] } { 'plot': 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.', 'title': 'Pat Garrett & Billy the Kid', 'highlights': [{ 'score': 2.115748405456543, 'path': 'plot', 'texts': [ {'value': 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy ', 'type': 'text'}, {'value': 'New', 'type': 'hit'}, {'value': ' Mexico cattle barons--his sole ', 'type': 'text'}, {'value': 'purpose', 'type': 'hit'}, {'value': ' being to bring down his old friend Billy the Kid.', 'type': 'text'} ] }] }
python partial-match-query.py
{ 'plot': 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', 'title': 'Star Wars: Episode V - The Empire Strikes Back' } { 'plot': "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", 'title': 'Major League' } { 'plot': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', 'title': 'Music Within' } { 'plot': "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", 'title': 'Her' } { 'plot': 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', 'title': 'Kick' }
python partial-match-query.py
{ 'plot': 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.', 'title': 'Star Wars: Episode V - The Empire Strikes Back' } { 'plot': "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.", 'title': 'Major League' } { 'plot': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.', 'title': 'Music Within' } { 'plot': "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.", 'title': 'Her' } { 'plot': 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.', 'title': 'Kick' }