Menu Docs
Página inicial do Docs
/ /

Analisador múltiplo

Você pode usar o objeto multi em sua definição de índice para especificar analisadores alternativos com os quais também indexar o campo. Ao indexar um campo com analisadores alternativos além do analisador padrão, você pode pesquisar a coleção com o analisador padrão ou alternativo. Esta página demonstra como especificar analisadores alternativos na sua definição de índice usando multi.

A opção de caminho do multi está disponível somente para campos do tipo string.

A Pesquisa do MongoDB não suporta o aninhamento de múltiplas camadas de objetos multi.

Os exemplos seguintes demonstram definições de índice nos campos na coleção sample_mflix.movies . Se você carregar a coleção no seu cluster, você poderá criar os índices de exemplo utilizando o Editor Visual ou oEditor JSON do na UI do Atlas ou utilizando omongosh.


➤ Use o menu suspenso Selecione seu idioma para definir a interface para o exemplo nesta página.


O exemplo de definição de índice a seguir especifica um índice no campo title usando o analisador standard. A definição do índice também especifica o analisador lucene.french como um analisador alternativo para o campo title, com o nome frenchAnalyzer.

  1. Clique em Refine Your Index para configurar seu índice.

  2. Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.

  3. Selecione title no menu suspenso Field Name.

  4. Clique no menu suspenso Data Type e selecione String se ainda não estiver selecionado.

  5. Expanda o String Properties e faça as seguintes alterações:

    Analisador de índice

    Selecione lucene.standard no menu suspenso se ainda não estiver selecionado.

    Analisador de pesquisa

    Selecione lucene.standard no menu suspenso se ainda não estiver selecionado.

    Opções de índice

    Use o offsets padrão.

    Store

    Use o true padrão.

    Ignorar acima

    Manter a configuração padrão.

    Normas

    Use o include padrão.

  6. Clique em Add Multi Field para configurar outro analyzer no campo title .

  7. Insira frenchAnalyzer no campo Multi Field Name .

  8. Faça as seguintes alterações em Multi Field Properties:

    Analisador de índice

    Selecione lucene.french no menu suspenso se ainda não estiver selecionado.

    Analisador de pesquisa

    Selecione lucene.french no menu suspenso se ainda não estiver selecionado.

    Opções de índice

    Use o offsets padrão.

    Store

    Use o true padrão.

    Ignorar acima

    Manter a configuração padrão.

    Normas

    Use o include padrão.

  9. Clique em Add.

  10. Clique em Save Changes.

  11. Clique em Create Search Index.

  1. Substitua a definição de índice padrão pela seguinte definição de índice.

    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. Clique em Next.

  3. Clique em 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)

A query a seguir usa o analisador alternativo, chamado frenchAnalyzer, para pesquisar a string liberte.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em 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 } ]

O documento nos resultados é uma correspondência porque o frenchAnalyzer reduz a string indexada è Nous la Libertè e o termo de query liberte para a palavra base libert. O MongoDB Search não retornará este documento para uma pesquisa com o analisador standard porque ele não remove os diacríticos. Cada analisador gera os seguintes tokens (termos pesquisáveis) para o índice e query:

Analisador
Index Tokens
Tokens de consulta

Analisador padrão

è, nous, la, libertè

libertè

Analisador Francês

è, libert

libert

A definição de exemplo de índice a seguir especifica um índice nos campos title e plot usando o analisador standard. A definição do índice também especifica lucene.french como um analisador alternativo para os campos title e plot.

  1. Clique em Refine Your Index para configurar seu índice.

  2. Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.

  3. Selecione title no menu suspenso Field Name.

  4. Clique no menu suspenso Data Type e selecione String se ainda não estiver selecionado.

  5. Expanda o String Properties e faça as seguintes alterações:

    Analisador de índice

    Selecione lucene.standard no menu suspenso se ainda não estiver selecionado.

    Analisador de pesquisa

    Selecione lucene.standard no menu suspenso se ainda não estiver selecionado.

    Opções de índice

    Use o offsets padrão.

    Store

    Use o true padrão.

    Ignorar acima

    Manter a configuração padrão.

    Normas

    Use o include padrão.

  6. Clique em Add Multi Field para configurar outro analyzer no campo title .

  7. Insira frenchAnalyzer no campo Multi Field Name .

  8. Faça as seguintes alterações em Multi Field Properties:

    Analisador de índice

    Selecione lucene.french no menu suspenso se ainda não estiver selecionado.

    Analisador de pesquisa

    Selecione lucene.french no menu suspenso se ainda não estiver selecionado.

    Opções de índice

    Use o offsets padrão.

    Store

    Use o true padrão.

    Ignorar acima

    Manter a configuração padrão.

    Normas

    Use o include padrão.

  9. Clique em Add.

  10. Clique em Add Field Mapping para abrir a janela Add Field Mapping.

  11. Selecione plot no menu suspenso Field Name.

  12. Repita as etapas 4 a 9.

  13. Clique em Save Changes.

  14. Clique em Create Search Index.

  1. Substitua a definição de índice padrão pela seguinte definição de índice.

    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. Clique em Next.

  3. Clique em 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)

A seguinte query busca correspondências para a string revolution nos campos title e plot usando o analisador alternativo chamado frenchAnalyzer.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em 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
}
]

Os documentos nos resultados contêm o termo de consulta em ambos os campos title e plot. Cada analisador cria os seguintes tokens (termos pesquisáveis) para o campo title de cada documento nos resultados:

Ano

Analisador

Index Tokens

Tokens de consulta

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

Para o quinto documento nos resultados, o frenchAnalyzer removeu os diacríticos no campo title para fazer a correspondência do documento com o termo de consulta.

Voltar

Linguagem

Nesta página