用于连字符、下划线和数字的 Elasticsearch 自定义分析器

2023-11-29

诚然,我对ES的分析部分不太熟悉。这是索引布局:

{
    "mappings": {
        "event": {
            "properties": {
                "ipaddress": {
                    "type": "string"
                },
                "hostname": {
                    "type": "string",
                    "analyzer": "my_analyzer",
                    "fields": {
                        "raw": {
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    },
    "settings": {
        "analysis": {
            "filter": {
                "my_filter": {
                    "type": "word_delimiter",
                    "preserve_original": true
                }
            },
            "analyzer": {
                "my_analyzer": {
                    "type": "custom",
                    "tokenizer": "whitespace",
                    "filter": ["lowercase", "my_filter"]
                }
            }
        }
    }
}

您可以看到我尝试对主机名字段使用自定义分析器。当我使用此查询查找名为“WIN_1”的主机时,这种方法有效:

{
    "query": {
        "match": {
            "hostname": "WIN_1"
        }
    }
}

问题是它还会返回任何包含 1 的主机名。使用_analyze端点,我可以看到数字也被标记化了。

{
    "tokens": [
        {
            "token": "win_1",
            "start_offset": 0,
            "end_offset": 5,
            "type": "word",
            "position": 1
        },
        {
            "token": "win",
            "start_offset": 0,
            "end_offset": 3,
            "type": "word",
            "position": 1
        },
        {
            "token": "1",
            "start_offset": 4,
            "end_offset": 5,
            "type": "word",
            "position": 2
        }
    ]
}

我想要做的是搜索 WIN 并取回名称中包含 WIN 的任何主机。但我还需要能够搜索 WIN_1 并取回该确切的主机或名称中包含 WIN_1 的任何主机。下面是一些测试数据。

{
    "ipaddress": "192.168.1.253",
    "hostname": "WIN_8_ENT_1"
}
{
    "ipaddress": "10.0.0.1",
    "hostname": "server1"
}
{
    "ipaddress": "172.20.10.36",
    "hostname": "ServA-1"
}

希望有人能指出我正确的方向。我的简单查询也可能不是正确的方法。我已经仔细阅读了 ES 文档,但它们的示例并不好。


您可以更改分析以使用丢弃数字和下划线的模式分析器:

{
   "analysis": {
      "analyzer": {
          "word_only": {
              "type": "pattern",
              "pattern": "([^\p{L}]+)"
          }
       }
    }
}

使用分析 API:

curl -XGET 'localhost:9200/{yourIndex}/_analyze?analyzer=word_only&pretty=true' -d 'WIN_8_ENT_1'

返回:

"tokens" : [ {
    "token" : "win",
    "start_offset" : 0,
    "end_offset" : 3,
    "type" : "word",
    "position" : 1
}, {
    "token" : "ent",
    "start_offset" : 6,
    "end_offset" : 9,
    "type" : "word",
    "position" : 2
} ]

你的映射将变成:

{
    "event": {
        "properties": {
            "ipaddress": {
                 "type": "string"
             },
             "hostname": {
                 "type": "string",
                 "analyzer": "word_only",
                 "fields": {
                     "raw": {
                         "type": "string",
                         "index": "not_analyzed"
                     }
                 }
             }
         }
    }
}

您可以使用 multi_match 查询来获取您想要的结果:

{
    "query": {
        "multi_match": {
            "fields": [
                "hostname",
                "hostname.raw"
            ],
            "query": "WIN_1"
       }
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于连字符、下划线和数字的 Elasticsearch 自定义分析器 的相关文章

随机推荐

  • 未使用 Office Addin 设置打开的 xml 标头

    我正在查看这个 非常好 文档 http dev office com docs add ins word create better add ins for word with office open xml product word 更好
  • Jquery .keypress 动态添加的输入

    我当前正在通过 click 事件添加输入 然后想要监听此输入上发生的任何按键 但是 附加内容在插入后不会触发任何事件 即模糊 按键 焦点 有没有人有什么建议 提前致谢 recipientsDiv click function this ap
  • YouTube:像 Facebook 一样获取 YouTube 标题+图像+描述

    当你将 YouTube 链接粘贴到 你现在在做什么 时 他们是如何做到这一点的呢 然后在链接中出现youtube图片 标题 描述 他们是如何做到这一点的 这很难吗 这样做的例子会很棒 Facebook 中的识别适用于大多数链接 而不仅仅是来
  • 使用显卡代替 GDI+ 进行图像操作

    我有一个问题 这可能是一个白日梦 但我想知道我的 Stack Overflow 同伴是否可以帮助我 在我工作的公司 我们这样做billions每月的图像处理次数 基本上 我们拍摄一张巨大的图像 将其切成 256 像素的方形图像 对它们进行颜
  • Mongoose 架构:如何设置数组中的最大项目数?

    我有一个猫鼬模式 其中包含一个对象数组和一个字符串数组 在这两种情况下 如何设置验证器以将可以插入的项目数量限制为 10 个 todoList type String pictures type String 没有默认值maxlength数
  • 如何删除带孔多边形上的顶点(节点)(Google 地图 V3)

    我从以下位置获取了这个示例 解决方案 伊恩 格兰杰 但我添加了一个带内孔的多边形 这个例子对于外部顶点路径工作正常 但对于内部顶点路径则不行 我需要为内部和外部节点实现事件监听器 因为在内部顶点发生火灾事件时 删除外部顶点 效果不太好 有人
  • Case 语句 - 根据条件值隐藏/取消隐藏

    如果 case 值为 否 我会尝试隐藏一列 我将其保存在工作表中 而不是模块中 Private Sub Worksheet Change ByVal Target As Range ActiveSheet Activate If Not A
  • 将用户的键盘输入过滤到 JTextField (swing)

    如何在输入 JTextField 之前限制键盘输入 swing 我只想允许用户输入 0123456789abcdef 个字符 且不超过 1 个 or char 我的 JTextField 是单行输入字段 thanks 您可以通过以下方式实现
  • 为什么我们需要 SqlCeCommand.Parameters.AddWithValue() 来插入值?

    我有一个 C WPF 桌面应用程序 它使用 SQL Compact 3 5 作为其嵌入式数据库 在插入函数中有 using SqlCeCommand com new SqlCeCommand INSERT INTO FooTable VAL
  • 我可以根据字段的值获取枚举吗?

    我想根据其字段值获取特定的枚举 Enum public enum CrimeCategory ASBO Anti Social Behaviour BURG Burglary CRIMDAM Criminal Damage And Arso
  • Python 优雅的 int(string,base) 逆函数

    Python 允许使用 2 36 范围内的任何基数从字符串转换为整数 使用 int string base 我正在寻找一个优雅的反函数 它接受一个整数和一个基数并返回一个字符串 例如 gt gt gt str base 224 15 ee
  • Python从父级子文件夹导入

    我有个问题 我有一个这样的目录设置 folder main py stuff init py function py items init py class py 我的问题是如何将 class py 导入到 function py 中 此设
  • Android 中的嵌套形状

    我正在尝试绘制一个具有三个矩形的形状 纯色 gradient 白线 我怎么做 当我尝试这个时 它不起作用 布局具有父颜色
  • 单击时 WPF 按钮闪烁为白色

    我刚刚创建了 wpf 按钮 当我单击该按钮时 它会像闪烁一样变为白色 并在释放按钮时变回原始颜色 可能是什么问题呢 我没有使用任何效果 下面是我的按钮 xaml 请指教
  • 将 404 错误页面重定向到 Tomcat 中 Spring MVC Web 应用程序的自定义页面

    我正在使用 tomcat 7 并且在 tomcat 7 中构建并部署了 Spring MVC web 应用程序 并且它工作得非常好 我想要的是 每当我的服务器上发生 404 错误时 它应该被重定向到我在 web 应用程序中构建的自定义页面
  • openGL glx.h 缺少 xcode 4 mac lion 形式

    我正在尝试设置一个示例项目 它使用 GLSDK 我使用 premake 设置它 将项目基础 sdk 设置为 10 6 因为我使用的是 xcode 4 但是当我尝试编译时 我从示例文件中得到 GL gl h not found 因此 我手动添
  • ASM:“cmp”的操作数类型不匹配

    我正在执行 x86 汇编代码 并且不断收到此错误 cmp 的操作数类型不匹配 它出现的代码行是 cmpb rdi 0 在 AT T 语法 您使用的语法 中 指令有一个尺寸后缀来指示操作数的大小 尺寸后缀为 b byte 1 bytes w
  • 泛型超级与扩展

    正当我以为我终于理解了泛型时 我遇到了以下示例 public class Organic
  • SQLAlchemy 为每个查询添加注释

    我试图让 SQLAlchemy 为我提交的每个查询添加注释 我从文档中知道我可以做这样的事情 from sqlalchemy sql expression import Insert compiles Insert def prefix i
  • 用于连字符、下划线和数字的 Elasticsearch 自定义分析器

    诚然 我对ES的分析部分不太熟悉 这是索引布局 mappings event properties ipaddress type string hostname type string analyzer my analyzer fields