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

【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 在处理复杂文本分析和搜索场景时的灵活性和准确性。

相关文章:

  • 【LeetCode】739. 每日温度
  • rust学习二、入门之运行单个脚本
  • vue前端可视化大屏页面适配方案
  • 日本90年代经济泡沫初期是什么情况?
  • 面试经典150题——字典树
  • 深入探索xtquant:账户信息查询的全面指南
  • WPS中如何批量上下居中对齐word表格中的所有文字
  • DeepSeek的深度解析:由来、研发过程、公司背景、优势、劣势与总结
  • WSL Ubuntu 安装 CUDA 教程
  • 嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
  • 芯谷 D2761:专为扬声器保护设计的音频限幅器
  • 网络将内网服务转换到公网上
  • vue学习10
  • Windows 图形显示驱动开发-WDDM 2.0 -GpuMmu 寻址方式
  • 蓝桥杯单片机组第十三届初赛试题-程序题(第2批)
  • 我用AI做数据分析之数据清洗
  • 【python】连接Jira获取token以及jira对象
  • C++-----------酒店客房管理系统
  • Maven下载安装IDEA使用MavenJava在pom.xml配置教程
  • Python--多线程
  • 郑州大学动态网站开发考试答案/公司做网页要多少钱
  • 刚开始做网站布局很吃力 怎么办/谷歌排名优化入门教程
  • b2c有哪些网站/哪个平台可以免费推广
  • 怎样做游戏网站/兰州网站seo优化
  • 塑料机械怎么做网站/指数搜索
  • 南山商城网站建设哪家公司靠谱/杭州百度首页排名