Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Анализ текста ›Настройка анализа текста

Указание анализатора

Elasticsearch предлагает различные способы указания встроенных или настраиваемых анализаторов:

  • По полю, индексу или запросу
  • Для индексации или поиска

Держите это просто

Гибкость в указании анализаторов на разных уровнях и для разных моментов времени – это здорово…​ но только когда это необходимо.

В большинстве случаев лучше всего подходит простой подход: укажите анализатор для каждого поля, как описано в Укажите анализатор для поля.

Этот подход хорошо работает с поведением по умолчанию Elasticsearch, позволяя использовать один и тот же анализатор для индексации и поиска. Он также позволяет быстро увидеть, какой анализатор применяется к какому полю с помощью API получения отображения.

Если вы обычно не создаёте отображения для своих индексов, вы можете использовать шаблоны индексов, чтобы добиться аналогичного эффекта.

Как Elasticsearch определяет анализатор индекса

Elasticsearch определяет используемый анализатор индекса, проверяя следующие параметры в порядке:

  1. Параметр analyzer отображения для поля. Смотрите Укажите анализатор для поля.
  2. Настройка индекса analysis.analyzer.default. Смотрите Укажите анализатор по умолчанию для индекса.

Если ни один из этих параметров не указан, используется анализатор standard.

Укажите анализатор для поля

При отображении индекса вы можете использовать параметр analyzer отображения, чтобы указать анализатор для каждого поля text.

Следующий запрос API создания индекса устанавливает анализатор whitespace в качестве анализатора для поля title.

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "title": {
                "type": "text",
                "analyzer": "whitespace"
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        title: {
          type: 'text',
          analyzer: 'whitespace'
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      title: {
        type: "text",
        analyzer: "whitespace",
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "whitespace"
      }
    }
  }
}

Укажите анализатор по умолчанию для индекса

В дополнение к анализатору на уровне поля вы можете установить резервный анализатор, используя настройку analysis.analyzer.default.

Следующий запрос API создания индекса устанавливает анализатор simple в качестве резервного анализатора для my-index-000001.

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "default": {
                    "type": "simple"
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          default: {
            type: 'simple'
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        default: {
          type: "simple",
        },
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        }
      }
    }
  }
}

Как Elasticsearch определяет анализатор поиска

В большинстве случаев, указание другого анализатора поиска не требуется. Это может отрицательно повлиять на релевантность и привести к неожиданным результатам поиска.

Если вы решите указать отдельный анализатор поиска, мы рекомендуем вам тщательно протестировать вашу конфигурацию анализа перед внедрением в производство.

При поиске Elasticsearch определяет используемый анализатор, проверяя следующие параметры в порядке:

  1. Параметр analyzer в запросе поиска. Смотрите Укажите анализатор поиска для запроса.
  2. Параметр search_analyzer отображения для поля. Смотрите Укажите анализатор поиска для поля.
  3. Настройка индекса analysis.analyzer.default_search. Смотрите Укажите анализатор поиска по умолчанию для индекса.
  4. Параметр analyzer отображения для поля. Смотрите Укажите анализатор для поля.

Если ни один из этих параметров не указан, используется анализатор standard.

Укажите анализатор поиска для запроса

При написании полнотекстового запроса вы можете использовать параметр analyzer для указания анализатора поиска. Если он указан, он переопределяет любые другие анализаторы поиска.

Следующий запрос API поиска устанавливает анализатор stop в качестве анализатора поиска для запроса match.

resp = client.search(
    index="my-index-000001",
    query={
        "match": {
            "message": {
                "query": "Quick foxes",
                "analyzer": "stop"
            }
        }
    },
)
print(resp)
response = client.search(
  index: 'my-index-000001',
  body: {
    query: {
      match: {
        message: {
          query: 'Quick foxes',
          analyzer: 'stop'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  index: "my-index-000001",
  query: {
    match: {
      message: {
        query: "Quick foxes",
        analyzer: "stop",
      },
    },
  },
});
console.log(response);
GET my-index-000001/_search
{
  "query": {
    "match": {
      "message": {
        "query": "Quick foxes",
        "analyzer": "stop"
      }
    }
  }
}

Укажите анализатор поиска для поля

При отображении индекса вы можете использовать параметр search_analyzer отображения, чтобы указать анализатор поиска для каждого поля text.

Если анализатор поиска указан, анализатор индекса также должен быть указан с помощью параметра analyzer.

Следующий запрос API создания индекса устанавливает анализатор simple в качестве анализатора поиска для поля title.

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "title": {
                "type": "text",
                "analyzer": "whitespace",
                "search_analyzer": "simple"
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        title: {
          type: 'text',
          analyzer: 'whitespace',
          search_analyzer: 'simple'
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      title: {
        type: "text",
        analyzer: "whitespace",
        search_analyzer: "simple",
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "whitespace",
        "search_analyzer": "simple"
      }
    }
  }
}

Укажите анализатор поиска по умолчанию для индекса

При создании индекса вы можете установить анализатор поиска по умолчанию, используя настройку analysis.analyzer.default_search.

Если анализатор поиска указан, анализатор индекса по умолчанию также должен быть указан с помощью настройки analysis.analyzer.default.

Следующий запрос API создания индекса устанавливает анализатор whitespace в качестве анализатора поиска по умолчанию для индекса my-index-000001.

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "default": {
                    "type": "simple"
                },
                "default_search": {
                    "type": "whitespace"
                }
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          default: {
            type: 'simple'
          },
          default_search: {
            type: 'whitespace'
          }
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        default: {
          type: "simple",
        },
        default_search: {
          type: "whitespace",
        },
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        },
        "default_search": {
          "type": "whitespace"
        }
      }
    }
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/specify-analyzer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API