`

指定Elasticsearch 的 Analyzer

    博客分类:
  • ELK
阅读更多

安装好ELK后,默认的elasticsearch用的分词器为standard analyzer,所以我们的异常“org.springframework.jdbc.BadSqlGrammarException”不能通过BadSqlGrammarException搜索到。

 

以“one.two.three.+four”为例子,如果用standard analyzer,只有两个term,用simple将有4个term

https://discuss.elastic.co/t/dot-analyzer/3635/2

 

default analyzer,即standard analyzer

curl -XGET '
http://localhost:9200/twitter/_analyze?text=one.two.three.+four&pretty=1'
{
"tokens" : [ {
"token" : "one.two.three",
"start_offset" : 0,
"end_offset" : 14,
"type" : "",
"position" : 1
}, {
"token" : "four",
"start_offset" : 15,
"end_offset" : 19,
"type" : "",
"position" : 2
} ]
}

 改用simple analyzer,有4个term被分出来:

curl -XGET '
http://localhost:9200/twitter/_analyze?analyzer=simple&text=one.two.three.+four&pretty=1
'

{
"tokens" : [ {
"token" : "one",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 1
}, {
"token" : "two",
"start_offset" : 4,
"end_offset" : 7,
"type" : "word",
"position" : 2
}, {
"token" : "three",
"start_offset" : 8,
"end_offset" : 13,
"type" : "word",
"position" : 3
}, {
"token" : "four",
"start_offset" : 15,
"end_offset" : 19,
"type" : "word",
"position" : 4
} ]
}

 

分词器可以为每个query指定,每个field或者每个index。refer to :https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html

es选择分词器的顺序为:

索引阶段

-The analyzer defined in the field mapping.
-An analyzer named default in the index settings.
-The standard analyzer.

 查询阶段

-The analyzer defined in a full-text query.
-The search_analyzer defined in the field mapping.
-The analyzer defined in the field mapping.
-An analyzer named default_search in the index settings.
-An analyzer named default in the index settings.
-The standard analyzer.

 

我们设置logstash过来的数据对message field指定为simple analyzer:

 

PUT _template/logstash
{
    "template" : "logstash-*",
    "mappings": {
      "test": {
        "properties": {
          "message": { 
            "type": "text",
            "analyzer": "simple"
          }
        }
      }
  }
}

 创建一个名为logstash的template,它应用于所有名为logstash-*的index,为这个template建了一个名为test的mapping,该mapping下的message filed为文本类型,使用的analyze为simple。

 

OK,更改了名为logstash-*的index的analyzer为simple analyzer。测试一下:

1)在logstash监听的log中增加一条数据:

org.springframework.jdbc.BadSqlGrammarException: ### Error querying database.

 2)看到elasticsearch的console打出一行日志,上面这条数据已经被索引,并使用了我们定义的template logstash,以及我们的mapping test:

[2017-07-06T23:33:22,262][INFO ][o.e.c.m.MetaDataCreateIndexService] [4fPRwZ3] [logstash-2017.07.06] creating index, cause [auto(bulk api)], templates [logstash], shards [5]/[1], mappings [test]

 *关于 shards [5]/[1]:

By default, each index in Elasticsearch is allocated 5 primary shards and 1 replica which means that if you have at least two nodes in your cluster, your index will have 5 primary shards and another 5 replica shards (1 complete replica) for a total of 10 shards per index.

refer to:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#getting-started-shards-and-replicas

 

 3)测试通过“ jdbc”在message field来搜索: 

GET /_search
{
  "query": {
      "query_string": {
          "query": "jdbc",
          "fields": [
              "message"
          ]
      }
  }
}

 

可以看到搜索成功:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 6,
    "successful": 6,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1.1290016,
    "hits": [
      {
        "_index": "logstash-2017.07.06",
        "_type": "testlogs",
        "_id": "AV0YmlmqLzl7sqCPLrgd",
        "_score": 0.28582606,
        "_source": {
          "path": "/Users/jo/lp_logs/error.log",
          "@timestamp": "2017-07-06T15:52:34.975Z",
          "@version": "1",
          "host": "Zhuos-MacBook-Pro.local",
          "message": "\torg.springframework.jdbc.BadSqlGrammarException: ### Error querying database.",
          "type": "testlogs"
        }
      }
    ]
  }
}

 在Kibana中搜索message:jdbc即可获得结果。

 

 

但是比较奇怪的现象是,必须指定message域才能查出来。而message中的一些其他term,比如“Error”就可以不指定message直接查出来。

 

分享到:
评论

相关推荐

    elasticsearch-analysis-ik 7.17.16 分词器

    Elasticsearch(ES)是一款功能强大的全文搜索引擎,而分析器在ES中扮演着至关重要的角色,它负责将用户输入的文本进行预处理,包括分词、词形还原等步骤。`elasticsearch-analysis-ik`是一个专为Elasticsearch设计...

    elasticsearch-analysis-ik,ik分析插件将lucene ik analyzer集成到elasticsearch中,支持自定义字典。.zip

    5. **自定义字典**:将自定义的字典文件放置在 Elasticsearch 的数据目录下,并在配置文件中指定路径,例如: ``` index.analysis.dict.user_dict: /path/to/your/dictionary.dic ``` **四、使用场景与优势** 1...

    elasticsearch-jieba-plugin 8.8.2.zip

    `elasticsearch-jieba-plugin`正是将jieba分词库与Elasticsearch进行了深度融合,使得ES在处理中文文本时能展现出卓越的性能。 安装此插件的过程简单明了。首先,下载`elasticsearch-jieba-plugin 8.8.2.zip`压缩包...

    elasticsearch7.17.11版本分词器插件安装包

    Elasticsearch(简称ES)是一款基于Lucene的分布式、RESTful搜索引擎,广泛应用于日志收集、数据分析等领域,是ELK(Elasticsearch、Logstash、Kibana)堆栈的重要组成部分。在处理中文数据时,合理的分词对于提升...

    elasticsearch7.17.10版本分词器插件安装包

    在日志收集和数据分析领域,Elasticsearch(简称ES)扮演着重要的角色。作为一个强大的全文搜索引擎,Elasticsearch允许用户通过简单的API进行数据索引、搜索、分析和可视化。然而,为了更好地处理中文等复杂语言,...

    适用于elasticsearch7.12.1版本

    安装完成后,需要在 Elasticsearch 的配置文件(如 `elasticsearch.yml`)中指定使用 Ik 分词器,并可能需要配置相应的参数,例如自定义词典路径。 压缩包中的 "elasticsearchik" 文件可能是 Ik 分词器的配置文件、...

    elasticsearch7.17.8版本分词器插件安装包

    Elasticsearch(ES)是一款流行的开源全文搜索引擎,常用于日志收集、数据分析和实时搜索等场景。在处理中文文本时,分词器插件是必不可少的组件,它能够将中文字符串分解为有意义的词汇单元,以提升搜索的准确性和...

    ElasticSearch安装ik分词插件.txt

    cp elasticsearch-analysis-ik-1.2.5.jar ES_HOME/plugins/analysis-ik/ ``` 同时,在 ElasticSearch 的配置文件 `elasticsearch.yml` 中添加以下内容来启用 ik 分词器: ```yaml index: analysis: analyzer: ik...

    elasticsearch-2.3.4_IK_HEAD

    - **索引创建与更新**:使用 Elasticsearch 的 API 创建索引时,可以指定 `analyzer` 参数为 `ik_max_word` 或 `ik_smart` 来使用 IK Analyzer。 - **搜索查询**:在查询语句中,可以使用 `match`、`multi_match` ...

    elasticsearch7.17.14版本分词器插件安装包

    在日志收集和分析领域,Elasticsearch(简称ES)是广泛应用的搜索引擎和数据分析工具,它与Logstash(数据采集)、Kibana(数据可视化)共同构成了ELK(Elasticsearch、Logstash、Kibana)栈。对于中文处理,分词器...

    elasticsearch-7.14.0+分词器+head插件一键下载

    Elasticsearch 内置了多种分词器,如标准分词器(Standard Analyzer)、关键词分词器(Keyword Analyzer)和中文分词器(Smart Chinese Analyzer)等。这些分词器可以根据不同的语言和应用场景进行定制,以确保搜索...

    IK分词器elasticsearch-analysis-ik-7.17.16

    IK分词器是针对Elasticsearch设计的一款强大的中文分词插件,其全称为"elasticsearch-analysis-ik"。在Elasticsearch中,分词器的作用至关重要,它负责将用户输入的文本进行词汇切分,以便进行后续的搜索和分析操作...

    elasticsearch-analysis-ik-7.12.1

    6. **多字段分析**:在 Elasticsearch 索引配置中,可以为不同的字段指定不同的分析器,以满足不同字段的分析需求。 **四、安装与配置** 1. **下载**:从官方仓库或其他可信来源下载 elasticsearch-analysis-ik-...

    elasticsearch-analysis-ik-7.4.2.zip

    在搜索引擎和文本分析领域,Elasticsearch(简称ES)是一个广泛使用的开源解决方案,它提供了强大的全文检索、实时分析以及高可用性。为了更好地处理中文文档,Elasticsearch 提供了多种插件,其中最著名的就是 IK ...

    elasticsearch-analysis-pinyin-7.12.1.zip

    在创建索引或更新映射时,指定我们定义的"pinyin"分析器,即可让Elasticsearch在处理中文时使用拼音策略。 总的来说,"elasticsearch-analysis-pinyin-7.12.1"插件是Elasticsearch处理中文文本的强大工具,通过拼音...

    elasticsearch-analysis-ik-7.4.2.zip.7z

    elasticsearch-analysis-ik插件由IK Analyzer团队开发,IK即“IntelligentKeyword”的缩写,寓意其具备智能化的分词能力。版本7.4.2是针对Elasticsearch 7.4.2版本的适配,确保与主程序的兼容性和稳定性。这个插件...

    elasticsearch-analysis-ik-7.8.0

    **Elasticsearch 分析插件 IK 中文分词器详解** Elasticsearch 是一个功能强大的全文搜索引擎,广泛应用于数据检索和分析。为了更好地处理中文文本,Elasticsearch 提供了各种分词器,其中最常用的就是 IK ...

    elasticsearch-analysis-ik-7.12.1.zip

    IK 分词器(IK Analyzer)是专为 Elasticsearch 和 Lucene 设计的一款强大的中文分词工具。 **IK 分词器介绍** IK 分词器由 Pangu 创建并维护,旨在解决中文分词问题。它的设计目标是快速、准确地对中文文本进行...

    elasticsearch-analysis-ik-8.2.0.zip

    3. **配置分词器**:在 Elasticsearch 的 mapping 中指定使用 IK 分词器,例如: ``` "analyzer": "ik_max_word", ``` 4. **自定义词典**:根据需求,可以在 config 目录下修改或添加自定义词典文件。 四、在...

    elasticsearch-analysis-ik-7.2.0.rar

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,基于Lucene库构建,广泛应用于大数据分析、日志检索和实时搜索等领域。其核心特性包括分布式、可扩展性和高灵活性。在处理中文文本时,Elasticsearch需要依赖特定...

Global site tag (gtag.js) - Google Analytics