指定分析器编辑

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

保持简单

在不同级别和不同时间指定分析器的灵活性很棒……​ *但只有在需要时才使用*。

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

这种方法与 Elasticsearch 的默认行为配合良好,允许您对索引和搜索使用相同的分析器。它还允许您使用 获取映射 API 快速查看哪个分析器适用于哪个字段。

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

Elasticsearch 如何确定索引分析器编辑

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

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

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

指定字段的分析器编辑

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

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

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

指定索引的默认分析器编辑

除了字段级分析器之外,还可以使用 analysis.analyzer.default 设置设置一个回退分析器。

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

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      analysis: {
        analyzer: {
          default: {
            type: 'simple'
          }
        }
      }
    }
  }
)
puts 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 查询的搜索分析器。

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

指定字段的搜索分析器编辑

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

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

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

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        title: {
          type: 'text',
          analyzer: 'whitespace',
          search_analyzer: 'simple'
        }
      }
    }
  }
)
puts 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 索引的默认搜索分析器。

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