当前位置: 首页 > article >正文

【Elasticsearch】Token Graphs

Elasticsearch 的Token Graphs是一种用于处理文本分析的高级功能,主要用于处理多词同义词、短语匹配等复杂场景。以下是关于 Token Graphs 的详细解释:

1.什么是 Token Graphs

Token Graphs 是一种有向无环图(DAG),用于表示文本流中的标记(tokens)及其位置关系。在 Token Graph 中:

• 每个位置(position)表示一个节点(node)。

• 每个标记(token)表示一条边(edge),指向下一个位置。

2.标记的位置和长度

在 Token Graph 中,每个标记都有两个重要属性:

• 位置(Position):标记在流中的位置。

• 位置长度(Position Length):标记跨越的位置数量。

例如,对于短语“domain name system”,其标记图可能如下:

• `domain`的位置为 0,位置长度为 1。

• `name`的位置为 1,位置长度为 1。

• `system`的位置为 2,位置长度为 1。

如果添加了同义词`dns`,则`dns`的位置为 0,位置长度为 3。

3.多位置标记

某些标记过滤器(如`synonym_graph`和`word_delimiter_graph`)可以生成跨越多个位置的标记。例如:

• 将“automatic teller machine”替换为“atm”。

• 将“domain name system”替换为“dns”。

4.标记图的用途

索引阶段

索引阶段不支持包含多位置标记的 Token Graphs。因此,需要使用`flatten_graph`过滤器将 Token Graph 展平,使其适合索引。

搜索阶段

在搜索阶段,Token Graphs 可以用于生成多个子查询。例如,用户搜索“domain name system is fragile”,Token Graph 会生成以下子查询:

• `dns is fragile`

• `domain name system is fragile`。

5.如何生成 Token Graphs

可以通过 Elasticsearch 的分析器(Analyzer)和标记过滤器(Token Filter)生成 Token Graphs。例如:

```json

GET /_analyze

{

  "tokenizer": "standard",

  "filter": [

    {

      "type": "synonym_graph",

      "synonyms": [ "dns, domain name system" ]

    }

  ],

  "text": "domain name system is fragile"

}

```

上述请求会生成一个包含多位置标记的 Token Graph。

6.展平 Token Graphs

为了使 Token Graphs 适合索引,可以使用`flatten_graph`过滤器。例如:

```json

GET /_analyze

{

  "tokenizer": "standard",

  "filter": [

    {

      "type": "synonym_graph",

      "synonyms": [ "dns, domain name system" ]

    },

    "flatten_graph"

  ],

  "text": "domain name system is fragile"

}

```

展平后的 Token Graph 会丢失一些位置信息,但适合索引。

7.注意事项

• 避免使用无效的 Token Graphs:某些标记过滤器(如`synonym`和`word_delimiter`)仅记录默认的位置长度(1),这可能导致生成无效的 Token Graphs,从而引发意外的搜索结果。

• 性能影响:展平 Token Graphs 是一个有损过程,建议仅在必要时使用。

通过合理使用 Token Graphs,可以显著提升 Elasticsearch 在处理复杂文本分析和搜索场景时的灵活性和准确性。


http://www.kler.cn/a/545357.html

相关文章:

  • luoguP8764 [蓝桥杯 2021 国 BC] 二进制问题
  • 记录 | WPF基础学习MVVM例子讲解1
  • DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?
  • 【Elasticsearch】simple_query_string
  • BGP配置华为——路由汇总
  • 天地图(uniapp)搜索、定位自己、获取标记点的经纬度
  • 2025年金三银四经典自动化测试面试题
  • Redis 数据类型 Set 集合
  • 嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc
  • .NET 9.0 的 Blazor Web App 项目,自定义日志 TLog V2 使用备忘
  • 为什么配置Redis时候要序列化配置呢
  • 无人机飞行试验大纲
  • joint_info.npz 找不到
  • AI代码生成器:前端开发的新纪元
  • 2024BaseCTF_week4_web上
  • 稀土紫外屏蔽剂:科技护航,守护您的健康与美丽
  • 【C语言】C语言 实践课题选题系统(源码+报告+数据文件)【独一无二】
  • 本地部署 Ollama 模型并实现本地可视化聊天界面(使用 DeepSeek)
  • win10中mstsc远程Centos-Stream 9图形化界面
  • 李超线段树 树链剖分 学习笔记