加载中

指定分析器

Elasticsearch 提供了多种方式来指定内置或自定义分析器

保持简单

在不同级别和不同时间点指定分析器的灵活性很好……但仅在必要时使用

在大多数情况下,简单的方法效果最好:为每个 text 字段指定一个分析器,如为字段指定分析器中所述。

这种方法与 Elasticsearch 的默认行为配合良好,让您可以在索引和搜索时使用相同的分析器。它还允许您使用 get mapping API 快速查看哪个分析器应用于哪个字段。

如果您通常不为索引创建映射,可以使用 索引模板 来达到类似的效果。

Elasticsearch 通过按顺序检查以下参数来确定要使用的索引分析器

  1. 该字段的 analyzer 映射参数。请参阅为字段指定分析器
  2. analysis.analyzer.default 索引设置。请参阅为索引指定默认分析器

如果未指定这些参数中的任何一个,则使用 standard 分析器

映射索引时,您可以使用 analyzer 映射参数为每个 text 字段指定分析器。

以下 创建索引 API 请求将 whitespace 分析器设置为 title 字段的分析器。

				PUT my-index-000001
					{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "whitespace"
      }
    }
  }
}
		

除了字段级分析器外,您还可以通过 analysis.analyzer.default 设置来设置回退分析器。

以下 创建索引 API 请求将 simple 分析器设置为 my-index-000001 的回退分析器。

				PUT my-index-000001
					{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        }
      }
    }
  }
}
		
警告

在大多数情况下,指定不同的搜索分析器是不必要的。这样做可能会对相关性产生负面影响,并导致意外的搜索结果。

如果您选择指定单独的搜索分析器,我们建议您在生产环境中部署之前彻底测试您的分析配置

在搜索时,Elasticsearch 通过按顺序检查以下参数来确定要使用的分析器

  1. 搜索查询中的 analyzer 参数。请参阅为查询指定搜索分析器
  2. 该字段的 search_analyzer 映射参数。请参阅为字段指定搜索分析器
  3. analysis.analyzer.default_search 索引设置。请参阅为索引指定默认搜索分析器
  4. 该字段的 analyzer 映射参数。请参阅为字段指定分析器

如果未指定这些参数中的任何一个,则使用 standard 分析器

编写全文查询时,您可以使用 analyzer 参数来指定搜索分析器。如果提供,它将覆盖任何其他搜索分析器。

以下 搜索 API 请求将 stop 分析器设置为 match 查询的搜索分析器。

				GET my-index-000001/_search
					{
  "query": {
    "match": {
      "message": {
        "query": "Quick foxes",
        "analyzer": "stop"
      }
    }
  }
}
		

映射索引时,您可以使用 search_analyzer 映射参数为每个 text 字段指定搜索分析器。

如果提供了搜索分析器,则必须同时使用 analyzer 参数指定索引分析器。

以下 创建索引 API 请求将 simple 分析器设置为 title 字段的搜索分析器。

				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 索引的默认搜索分析器。

				PUT my-index-000001
					{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "simple"
        },
        "default_search": {
          "type": "whitespace"
        }
      }
    }
  }
}
		

您只能在已关闭的索引上定义新分析器。要添加分析器,必须关闭索引,定义分析器,然后重新打开索引。

例如,以下命令将 content 分析器添加到 my-index-000001 索引中

				POST /my-index-000001/_close
		
				PUT /my-index-000001/_settings
					{
  "analysis" : {
    "analyzer":{
      "content":{
        "type":"custom",
        "tokenizer":"whitespace"
      }
    }
  }
}
		
				POST /my-index-000001/_open
		
警告

您无法关闭数据流的写入索引。要更新数据流的写入索引和未来后备索引的分析器,请更新该流所使用的索引模板中的分析器。然后滚动更新数据流(roll over),将新分析器应用于流的写入索引和未来的后备索引。这会影响滚动更新后添加到流中的搜索和任何新数据。但是,它不会影响数据流的现有后备索引或其现有数据。

要更改现有后备索引的分析器,您必须创建一个新的数据流并将数据重新索引(reindex)到其中。请参阅使用 reindex 更改映射或设置

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.