Docs 菜单
Docs 主页
/
Atlas
/ / / /

多分析器

您可以在索引定义中使用 multi对象来指定备用分析器,用于对字段建立索引。除了默认分析器以外,在使用备用分析器对字段进行索引时,您可以使用默认分析器或备用分析器搜索集合。本页说明了如何使用 multi索引定义中指定备用分析器

multi 路径选项仅适用于字符串类型的字段。

MongoDB Search 不支持嵌套多个 multi 对象层。

以下示例演示了 sample_mflix.movies集合中字段的索引定义。如果将集合加载到集群上,则可以使用Atlas用户界面中的可视化编辑器或 JSON 编辑器或使用 mongosh 创建示例索引。


➤ 使用选择语言下拉菜单为此页面上的示例设立界面。


以下示例索引定义使用 standard 分析器指定了 title 字段的索引。此索引定义还指定 lucene.french 分析器作为 title 字段的备用分析器,且名称为 frenchAnalyzer

  1. 单击 Refine Your Index 配置索引。

  2. Field Mappings 部分中,单击 Add Field 打开 Add Field Mapping 窗口。

  3. Field Name 下拉列表中选择 title

  4. 单击 Data Type 下拉列表并选择 String(如果尚未选择)。

  5. 展开 String Properties 并进行以下更改:

    索引分析器

    如果尚未选择,请从下拉菜单中选择 lucene.standard

    Search Analyzer

    如果尚未选择,请从下拉菜单中选择 lucene.standard

    索引选项

    使用默认 offsets

    Store

    使用默认 true

    忽略以上内容

    保留默认设置。

    规范

    使用默认 include

  6. 单击Add Multi Field可对title字段配置另一个分析器。

  7. Multi Field Name字段中输入frenchAnalyzer

  8. Multi Field Properties 进行以下更改:

    索引分析器

    如果尚未选择,请从下拉菜单中选择 lucene.french

    Search Analyzer

    如果尚未选择,请从下拉菜单中选择 lucene.french

    索引选项

    使用默认 offsets

    Store

    使用默认 true

    忽略以上内容

    保留默认设置。

    规范

    使用默认 include

  9. 单击 Add(连接)。

  10. 单击 Save Changes(连接)。

  11. 单击 Create Search Index(连接)。

  1. 将默认索引定义替换为以下索引定义。

    1{
    2 "mappings": {
    3 "dynamic": false,
    4 "fields": {
    5 "title": {
    6 "type": "string",
    7 "analyzer": "lucene.standard",
    8 "multi": {
    9 "frenchAnalyzer": {
    10 "type": "string",
    11 "analyzer": "lucene.french"
    12 }
    13 }
    14 }
    15 }
    16 }
    17}
  2. 单击 Next(连接)。

  3. 单击 Create Search Index(连接)。

1db.movies.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": false,
6 "fields": {
7 "title": {
8 "type": "string",
9 "analyzer": "lucene.standard",
10 "multi": {
11 "frenchAnalyzer": {
12 "type": "string",
13 "analyzer": "lucene.french"
14 }
15 }
16 }
17 }
18 }
19 }
20)

以下查询使用名为 frenchAnalyzer 的备用分析器来搜索字符串 liberte

  1. 单击索引的 Query 按钮。

  2. 单击 Edit Query 编辑查询。

  3. 单击查询栏上的 并选择数据库和集合。

  4. 将默认查询替换为以下内容,然后单击 Find

    [
    {
    "$search": {
    "text": {
    "query": "liberte",
    "path": { "value": "title", "multi": "frenchAnalyzer" }
    }
    }
    }
    ]
    SCORE: 4.9305267333984375 _id: "573a1392f29313caabcd9950"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    fullplot: "A famous left-wing satirical comedy about two ex-convicts, one of whom…"
    genres: Array (2)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-08-21 00:02:36.330000000"
    num_mflix_comments: 1
    plot: "A famous left-wing satirical comedy about two ex-convicts, one of whom…"
    poster: "https://m.media-amazon.com/images/M/MV5BODg0ODAzNTItM2M4ZC00NGYxLWIzMm…"
    rated: "APPROVED"
    released: 1931-12-31T00:00:00.000+00:00
    runtime: 97
    title: "è Nous la Libertè"
    tomatoes: Object
    type: "movie"
    writers: Array (1)
    year: 1931
1db.movies.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "liberte",
6 "path": { "value": "title", "multi": "frenchAnalyzer" }
7 }
8 }
9 },
10 {
11 "$project": {
12 "title": 1,
13 "year": 1,
14 "_id": 0
15 }
16 }
17])
[ { title: 'è Nous la Libertè', year: 1931 } ]

结果中的文档是匹配项,因为 frenchAnalyzer 将索引字符串 è Nous la Libertè 和查询术语liberte 缩减为基本词 libert。 使用 standard分析器进行搜索时, MongoDB搜索不会返回此文档,因为它不会删除变音符号。每个分析器为索引和查询生成以下词元(可搜索词):

分析器
Index Tokens
查询标记

标准分析器

è, nous , la , libertè

libertè

French 分析器

è, libert

libert

以下示例索引定义使用 standard 分析器指定 titleplot 字段的索引。此索引定义还指定 lucene.french 作为 titleplot 字段的备用分析器。

  1. 单击 Refine Your Index 配置索引。

  2. Field Mappings 部分中,单击 Add Field 打开 Add Field Mapping 窗口。

  3. Field Name 下拉列表中选择 title

  4. 单击 Data Type 下拉列表并选择 String(如果尚未选择)。

  5. 展开 String Properties 并进行以下更改:

    索引分析器

    如果尚未选择,请从下拉菜单中选择 lucene.standard

    Search Analyzer

    如果尚未选择,请从下拉菜单中选择 lucene.standard

    索引选项

    使用默认 offsets

    Store

    使用默认 true

    忽略以上内容

    保留默认设置。

    规范

    使用默认 include

  6. 单击Add Multi Field可对title字段配置另一个分析器。

  7. Multi Field Name字段中输入frenchAnalyzer

  8. Multi Field Properties 进行以下更改:

    索引分析器

    如果尚未选择,请从下拉菜单中选择 lucene.french

    Search Analyzer

    如果尚未选择,请从下拉菜单中选择 lucene.french

    索引选项

    使用默认 offsets

    Store

    使用默认 true

    忽略以上内容

    保留默认设置。

    规范

    使用默认 include

  9. 单击 Add(连接)。

  10. 点击 Add Field Mapping 打开 Add Field Mapping 窗口。

  11. Field Name 下拉列表中选择 plot

  12. 重复步骤 4 到 9。

  13. 单击 Save Changes(连接)。

  14. 单击 Create Search Index(连接)。

  1. 将默认索引定义替换为以下索引定义。

    1{
    2 "mappings": {
    3 "dynamic": false,
    4 "fields": {
    5 "title": {
    6 "type": "string",
    7 "analyzer": "lucene.standard",
    8 "multi": {
    9 "frenchAnalyzer": {
    10 "type": "string",
    11 "analyzer": "lucene.french"
    12 }
    13 }
    14 },
    15 "plot": {
    16 "type": "string",
    17 "analyzer": "lucene.standard",
    18 "multi": {
    19 "frenchAnalyzer": {
    20 "type": "string",
    21 "analyzer": "lucene.french"
    22 }
    23 }
    24 }
    25 }
    26 }
    27}
  2. 单击 Next(连接)。

  3. 单击 Create Search Index(连接)。

1db.movies.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": false,
6 "fields": {
7 "title": {
8 "type": "string",
9 "analyzer": "lucene.standard",
10 "multi": {
11 "frenchAnalyzer": {
12 "type": "string",
13 "analyzer": "lucene.french"
14 }
15 }
16 },
17 "plot": {
18 "type": "string",
19 "analyzer": "lucene.standard",
20 "multi": {
21 "frenchAnalyzer": {
22 "type": "string",
23 "analyzer": "lucene.french"
24 }
25 }
26 }
27 }
28 }
29 }
30)

以下查询使用名为 frenchAnalyzer 的备用分析器在 titleplot 字段中搜索字符串 revolution 的匹配项。

  1. 单击索引的 Query 按钮。

  2. 单击 Edit Query 编辑查询。

  3. 单击查询栏上的 并选择数据库和集合。

  4. 将默认查询替换为以下内容,然后单击 Find

    [
    {
    "$search": {
    "text": {
    "query": "revolution",
    "path": [
    "title", "plot",
    { "value": "title", "multi": "frenchAnalyzer" },
    { "value": "plot", "multi": "frenchAnalyzer" }
    ]
    }
    }
    }
    ]
    SCORE: 14.07243537902832 _id: "573a13dbf29313caabdaf845"
    awards: Object
    cast: Array (4)
    countries: Array (11)
    directors: Array (1)
    fullplot: "REVOLUTION is a film about changing the world, going for it, taking a …"
    genres: Array (3)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-07-09 11:14:18.300000000"
    metacritic: 53
    num_mflix_comments: 0
    plot: "REVOLUTION is a film about changing the world, going for it, taking a …"
    poster: "https://m.media-amazon.com/images/M/MV5BMTc1NDIxNjc0N15BMl5BanBnXkFtZT…"
    rated: "PG"
    released: 2015-04-22T00:00:00.000+00:00
    runtime: 85
    title: "Revolution"
    tomatoes: Object
    type: "movie"
    writers: Array (1)
    year: 2012
    SCORE: 13.935744285583496 _id: "573a1398f29313caabce9ae2"
    awards: Object
    cast: Array (4)
    countries: Array (2)
    directors: Array (1)
    fullplot: "New York trapper Tom Dobb becomes an unwilling participant in the Amer…"
    genres: Array (3)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-08-14 00:46:28.990000000"
    num_mflix_comments: 1
    plot: "New York trapper Tom Dobb becomes an unwilling participant in the Amer…"
    poster: "https://m.media-amazon.com/images/M/MV5BZmZhMmEyNjktZTgxZC00NzQyLTkyZD…"
    rated: "PG-13"
    released: 1985-12-25T00:00:00.000+00:00
    runtime: 126
    title: "Revolution"
    type: "movie"
    writers: Array (1)
    year: 1985
    SCORE: 11.623137474060059 _id: "573a13f5f29313caabde37d4"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    fullplot: "Together with five Soviet avant-garde artists, hero of the Russian rev…"
    genres: Array (1)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-09-15 03:33:53.177000000"
    num_mflix_comments: 1
    plot: "Together with five Soviet avant-garde artists, hero of the Russian rev…"
    released: 2014-11-18T00:00:00.000+00:00
    runtime: 113
    title: "Angels of Revolution"
    type: "movie"
    writers: Array (3)
    year: 2014
    SCORE: 11.210482597351074 _id: "573a1396f29313caabce4248"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    fullplot: "An account of the adventures of two sets of identical twins, badly scr…"
    genres: Array (2)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-09-05 00:50:08.277000000"
    num_mflix_comments: 0
    plot: "Two mismatched sets of identical twins - one aristocrat, one peasant -…"
    poster: "https://m.media-amazon.com/images/M/MV5BODM2MzE3NmMtNmE2ZS00OGI2LWI5NT…"
    rated: "M"
    released: 1970-08-14T00:00:00.000+00:00
    runtime: 90
    title: "Start the Revolution Without Me"
    tomatoes: Object
    type: "movie"
    writers: Array (2)
    year: 1970
    SCORE: 8.332647323608398 _id: "573a1398f29313caabceba10"
    awards: Object
    cast: Array (4)
    countries: Array (5)
    directors: Array (2)
    fullplot: "A history of the French Revolution from the decision of the king to co…"
    genres: Array (3)
    imdb: Object
    languages: Array (2)
    lastupdated: "2015-09-05 00:30:36.643000000"
    num_mflix_comments: 0
    plot: "A history of the French Revolution from the decision of the king to co…"
    released: 1989-10-25T00:00:00.000+00:00
    runtime: 360
    title: "La rèvolution franèaise"
    tomatoes: Object
    type: "movie"
    writers: Array (5)
    year: 1989
    SCORE: 7.699893474578857 _id: "573a13a4f29313caabd10215"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    genres: Array (1)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-09-10 17:19:25.853000000"
    metacritic: 63
    num_mflix_comments: 0
    poster: "https://m.media-amazon.com/images/M/MV5BMTkxOTUzNjg0Ml5BMl5BanBnXkFtZT…"
    released: 2001-04-22T00:00:00.000+00:00
    runtime: 90
    title: "Revolution #9"
    tomatoes: Object
    type: "movie"
    writers: Array (1)
    year: 2001
    SCORE: 6.8415961265563965 _id: "573a13a0f29313caabd05edb"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    fullplot: "Friendship and betrayal between two poets during the French Revolution…"
    genres: Array (2)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-04-17 01:56:58.940000000"
    metacritic: 60
    num_mflix_comments: 0
    plot: "Friendship and betrayal between two poets during the French Revolution…"
    poster: "https://m.media-amazon.com/images/M/MV5BMTQ0Nzc0OTkwM15BMl5BanBnXkFtZT…"
    rated: "PG-13"
    released: 2001-04-18T00:00:00.000+00:00
    runtime: 124
    title: "Pandaemonium"
    tomatoes: Object
    type: "movie"
    writers: Array (1)
    year: 2000
    SCORE: 6.7074995040893555 _id: "573a1397f29313caabce8972"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    fullplot: "Set ten years after the most peaceful revolution in United States hist…"
    genres: Array (3)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-09-10 17:14:53.427000000"
    num_mflix_comments: 1
    plot: "Set ten years after the most peaceful revolution in United States hist…"
    poster: "https://m.media-amazon.com/images/M/MV5BYTE5MGNhN2QtMTNhYy00MDQ1LTgzOT…"
    released: 1983-11-03T00:00:00.000+00:00
    runtime: 80
    title: "Born in Flames"
    tomatoes: Object
    type: "movie"
    writers: Array (2)
    year: 1983
    SCORE: 6.615457057952881 _id: "573a1395f29313caabce1c90"
    awards: Object
    cast: Array (4)
    countries: Array (1)
    directors: Array (1)
    fullplot: "The study of a youth on the edge of adulthood and his aunt, ten years …"
    genres: Array (2)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-08-21 00:16:07.580000000"
    num_mflix_comments: 0
    plot: "The study of a youth on the edge of adulthood and his aunt, ten years …"
    poster: "https://m.media-amazon.com/images/M/MV5BMmJjOGRjNWMtOGE5Ni00YzYwLThkM2…"
    released: 1964-05-12T00:00:00.000+00:00
    runtime: 105
    title: "Before the Revolution"
    tomatoes: Object
    type: "movie"
    writers: Array (2)
    year: 1964
    SCORE: 6.615457057952881 _id: "573a13cef29313caabd86ecc"
    awards: Object
    cast: Array (1)
    countries: Array (1)
    directors: Array (1)
    fullplot: "Through intimate interviews, provocative art, and rare, historical fil…"
    genres: Array (1)
    imdb: Object
    languages: Array (1)
    lastupdated: "2015-04-02 00:54:39.997000000"
    metacritic: 70
    num_mflix_comments: 1
    plot: "Through intimate interviews, provocative art, and rare, historical fil…"
    poster: "https://m.media-amazon.com/images/M/MV5BMjE1MDU1MDA2Nl5BMl5BanBnXkFtZT…"
    released: 2011-06-01T00:00:00.000+00:00
    runtime: 83
    title: "!Women Art Revolution"
    tomatoes: Object
    type: "movie"
    year: 2010
1db.movies.aggregate([
2 {
3 "$search": {
4 "text": {
5 "query": "revolution",
6 "path": ["title", "plot",
7 { "value": "title", "multi": "frenchAnalyzer" },
8 { "value": "plot", "multi": "frenchAnalyzer" }
9 ]
10 }
11 }
12 },
13 {
14 "$limit": 5
15 },
16 {
17 "$project": {
18 "title": 1,
19 "plot": 1,
20 "year": 1,
21 "_id": 0
22 }
23 }
24])
[
{
year: 2012,
plot: 'REVOLUTION is a film about changing the world, going for it, taking a stand, and fighting for something. A true-life adventure following Director, Rob Stewart (SHARKWATER) over four years ...',
title: 'Revolution'
},
{
plot: 'New York trapper Tom Dobb becomes an unwilling participant in the American Revolution after his son Ned is drafted into the Army by the villainous Sergeant Major Peasy. Tom attempts to find...',
title: 'Revolution',
year: 1985
},
{
plot: "Together with five Soviet avant-garde artists, hero of the Russian revolution Polina Schneider travels to Siberia to 'civilize' the native Khanty and Nenets tribes, for whom interaction ...",
title: 'Angels of Revolution',
year: 2014
},
{
plot: 'Two mismatched sets of identical twins - one aristocrat, one peasant - mistakenly exchange identities on the eve of the French Revolution.',
title: 'Start the Revolution Without Me',
year: 1970
},
{
plot: "A history of the French Revolution from the decision of the king to convene the Etats-Generaux in 1789 in order to deal with France's debt problem. The first part of the movie tells the ...",
title: 'La rèvolution franèaise',
year: 1989
}
]

结果中的文档在 titleplot 字段中包含查询术语。每个分析器为结果中每个文档的 title 字段创建以下标记(可搜索术语):

年份

分析器

Index Tokens

查询标记

2012

Standard Analyzer
French Analyzer
revolution
revolution
revolution
revolution

1985

Standard Analyzer
French Analyzer
revolution
revolution
revolution
revolution

2014

Standard Analyzer
French Analyzer
angels, of, revolution
angels, of, revolution
revolution
revolution

1970

Standard Analyzer
French Analyzer
start, the, revolution, without, me
start, the, revolution, without
revolution
revolution

1989

Standard Analyzer
French Analyzer
la, rèvolution, franèaise
revolution, franeais
revolution
revolution

对于这些结果中的第五个文档,frenchAnalyzer 删除了 title 字段中的标注字符,以便将此文档与查询词相匹配。

后退

语言

在此页面上