Token 计数字段类型

编辑

token_count 类型的字段实际上是一个 integer 字段,它接受字符串值,对其进行分析,然后索引字符串中的 token 数量。

例如:

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "name": {
                "type": "text",
                "fields": {
                    "length": {
                        "type": "token_count",
                        "analyzer": "standard"
                    }
                }
            }
        }
    },
)
print(resp)

resp1 = client.index(
    index="my-index-000001",
    id="1",
    document={
        "name": "John Smith"
    },
)
print(resp1)

resp2 = client.index(
    index="my-index-000001",
    id="2",
    document={
        "name": "Rachel Alice Williams"
    },
)
print(resp2)

resp3 = client.search(
    index="my-index-000001",
    query={
        "term": {
            "name.length": 3
        }
    },
)
print(resp3)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        name: {
          type: 'text',
          fields: {
            length: {
              type: 'token_count',
              analyzer: 'standard'
            }
          }
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    name: 'John Smith'
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 2,
  body: {
    name: 'Rachel Alice Williams'
  }
)
puts response

response = client.search(
  index: 'my-index-000001',
  body: {
    query: {
      term: {
        'name.length' => 3
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      name: {
        type: "text",
        fields: {
          length: {
            type: "token_count",
            analyzer: "standard",
          },
        },
      },
    },
  },
});
console.log(response);

const response1 = await client.index({
  index: "my-index-000001",
  id: 1,
  document: {
    name: "John Smith",
  },
});
console.log(response1);

const response2 = await client.index({
  index: "my-index-000001",
  id: 2,
  document: {
    name: "Rachel Alice Williams",
  },
});
console.log(response2);

const response3 = await client.search({
  index: "my-index-000001",
  query: {
    term: {
      "name.length": 3,
    },
  },
});
console.log(response3);
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "name": { 
        "type": "text",
        "fields": {
          "length": { 
            "type":     "token_count",
            "analyzer": "standard"
          }
        }
      }
    }
  }
}

PUT my-index-000001/_doc/1
{ "name": "John Smith" }

PUT my-index-000001/_doc/2
{ "name": "Rachel Alice Williams" }

GET my-index-000001/_search
{
  "query": {
    "term": {
      "name.length": 3 
    }
  }
}

name 字段是一个 text 字段,它使用默认的 standard 分析器。

name.length 字段是一个 token_count 多字段,它将索引 name 字段中的 token 数量。

这个查询只会匹配包含 Rachel Alice Williams 的文档,因为它包含三个 token。

token_count 字段的参数

编辑

token_count 字段接受以下参数:

analyzer

应该用于分析字符串值的 分析器。必需。为了获得最佳性能,请使用不带 token 过滤器的分析器。

enable_position_increments

指示是否应计算位置增量。如果您不希望计算被分析器过滤器(如 stop)删除的 token,请设置为 false。默认为 true

doc_values

该字段是否应以列式方式存储在磁盘上,以便以后用于排序、聚合或脚本?接受 true(默认)或 false

index

该字段是否应可搜索?接受 true(默认)和 false

null_value

接受与该字段的 type 相同的数值,该数值将替换任何显式的 null 值。默认为 null,这意味着该字段被视为缺失。

store

该字段的值是否应该存储并可从 _source 字段单独检索。接受 truefalse(默认)。

合成 _source

编辑

合成 _source 通常仅适用于 TSDB 索引(index.mode 设置为 time_series 的索引)。对于其他索引,合成 _source 处于技术预览状态。技术预览中的功能可能会在未来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 的约束。

token_count 字段在其默认配置中支持 合成 _source