当前位置: 首页 > 面试题库 >

在Logstash中为新字段设置Elasticsearch Analyzer

葛永丰
2023-03-14
问题内容

通过使用GROK filter,我们可以向Logstash添加新字段。

但是,在这里,我想知道如何为该特定领域设置分析仪。

例如:,我有一个新的id字段,其字段类似于a_b,但Elasticsearch提供的常规分析器会将其分为ab。因此,我无法将术语功能有效地应用于该特定领域并使之有用。

在这里,对于ID字段,我想应用我自己的自定义分析器,该分析器不标记值,而是应用小写过滤器。

如何在logstash中完成此操作。


问题答案:

Elasticsearch中的默认分析器将使用Standard标记器对术语进行标记,这将标记a b为两个术语:ab,在默认停用词标记过滤器之后,该过滤器将变为单个术语b。请参见此剧本,以一个小的示例说明如何分析文本。

为了按照您指定的方式进行分析,我们必须对分析器进行如下配置:

"analyzer": {
    "my_id_analyzer": {
        "type": "custom",
        "tokenizer": "keyword",
        "filters": ["lowercase"]
    }
}

Byt因为Logstash通常在需要时创建新索引,所以我们必须确保在创建所有索引时都可以使用该分析器。有两种方法可以实现此目的:1)将其添加到Elasticsearch实例配置(elasticsearch.yml),或2)创建包含分析器的索引模板。

由于我们只需要针对特定​​索引(即具有前缀的索引)使用此分析器logstash-。通过使用Index模板API,我们可以执行以下操作:

curl localhost:9200/_template/logstash-id -XPUT -d '{
    "template": "logstash-*",
    "settings" : {
        "analysis": {
            "analyzer": {
                "my_id_analyzer": {
                    "type": "custom",
                    "tokenizer": "keyword",
                    "filters": ["lowercase"]
                }
            }
        }
    },
    "mappings": {
        "_default_": {
             "properties" : {
                "id" : { "type" : "string", "analyzer" : "my_id_analyzer" }
            }
        }
    }
}'

执行完上述命令后,此模板将应用于具有logstash-随后创建的前缀的任何索引,唯一的“魔术”部分是添加的映射定义,该映射定义使用内置类型_default_,该类型是“
any”类型的占位符在给定的索引中。这意味着映射将被添加到任何类型,而不管其实际的类型名称如何。



 类似资料:
  • 问题内容: 在golang中,有没有办法查看是否可以将解编入结构的json字段与设置为null的json字段区分开?因为两者都将struct中的值设置为nil,但是我需要知道字段是否以该字段开头,并查看是否有人将其设置为null。 VS 当解组为结构时,两个json均为零。任何有用的资源将不胜感激! 问题答案: 使用以“拖延”解组过程决定做某件事之前要确定原始字节: 参观游乐场https://pl

  • 问题内容: 如何为欧姆对象动态设置字段? 问题答案: 中的class方法为命名属性定义访问器和更改器方法: 因此,当您说时,您可以免费获得以下方法: 您可以像这样调用mutator方法: 如果您真的想说,那么可以在课堂上添加以下内容: 您可能还希望访问器版本保持对称:

  • 问题内容: 我有一个带有两个表的SQL Server 2008数据库。第一个表称为Department。第二个表称为票证。这两个表的定义如下: 我正在尝试找出一种动态更新Department.TotalTickets值的方法。当添加或删除工单时,我想自动增加或减少TotalTickets的值。有人可以告诉我在SQL Server 2008上执行此操作的最佳方法吗? 谢谢 问题答案: 有多种方法可以

  • 我知道我可以像这样轻松地在JSP中格式化日期: 我做错了什么?

  • 我在groovy/spock中测试了一个java类。java类有最后一个字段: 我想测试一个方法是否使用这个记录器,最好是使用模拟。问题是这个字段是最终的,所以我不能直接设置它。我知道有一些变通方法,比如: 修改ield.set字段field.get 但这些都是可怕的黑客。有没有更好的方法?

  • 如何通过JavaScript或jQuery在更多输入字段中设置值(默认值)?非常感谢。