java - ElasticSearch:查询点分隔单词的部分

标签 java amazon-web-services elasticsearch kibana

我有一个AWS ElasticSearch(v 5.5)/ Kibana(v 5.5.2)实例,它从Java服务中提取日志数据。在我的日志中,我具有带有完全限定的异常名称(例如com.example.MyException)的堆栈跟踪。

我的问题是,当我尝试通过Kibana搜索MyException时,结果为零,但是如果我搜索com.example.MyException,则返回的结果都是我期望的。

ElasticSearch word-delimiter文档说:

Words are split into subwords with the following rules:

  • split on intra-word delimiters (by default, all non alpha-numeric characters)


我希望这意味着我的完全合格的类(class)名称将由点分隔,并且我将能够仅搜索类(class)名称。

我需要做些什么才能能够仅搜索类名称以获得ElasticSearch的结果。

更新

我的日志已通过Stream Cloudwatch Logs to EslaticSearch AWS功能吸收到ElasticSearch中。此功能生成一个AWS lmbda函数,该函数将日志记录发送到ElasticSearch。我正在使用默认的生成函数(see code)。我尚未配置任何ElasticSearch映射,所以我假设我使用的是Dynamic Mapping的默认值

样本日志条目:
{
    "date": 1516892650443,
    "requestID": "ff5d5a37-01e0-11e8-bf20-610a6080caa5",
    "logger name": "com.example.MyHandler",
    "level": "ERROR",
    "message": "Exception thrown: ",
    "exception": " com.example.MyException \n \tat com.example.MyHandler.handle(MyHandler.java:100) \n \tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) \n \tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) \n \tat java.lang.Thread.run(Thread.java:748) \n Caused by: java.io.IOException: Stream closed\n \tat java.io.FileInputStream.read(FileInputStream.java:100)"
}

样本索引配置:
{
  "cwl-2018.01.16": {
    "aliases": {},
    "mappings": {
      "MyService-prod": {
        "properties": {
          "@id": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@log_group": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@log_stream": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@message": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@owner": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@timestamp": {
            "type": "date"
          },
          "date": {
            "type": "long"
          },
          "exception": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "level": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "logger name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "message": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "requestID": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    },
    "settings": {
      "index": {
        "refresh_interval": "5s",
        "number_of_shards": "5",
        "blocks": {
          "write": "false"
        },
        "provided_name": "cwl-2018.01.16",
        "creation_date": "1516060800423",
        "number_of_replicas": "0",
        "uuid": "xxxx",
        "version": {
          "created": "5050299"
        }
      }
    }
  }
}

最佳答案

您是否尝试过在Kibana中搜索* MyException?我在我的环境中使用了它,并且效果很好。但是您应该对时间范围保持谨慎,起初我用了90天,但必须重新启动Elasticsearch。如果您指定要查看的字段,则它会更快,因此我使用了“logger:* MySearchExpression”,它在几秒钟内就可以工作了。

关于java - ElasticSearch:查询点分隔单词的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431742/

相关文章:

elasticsearch - 搜索查询以匹配所有并返回所有数据而不使用 curl

json - 在Elasticsearch中对JSON数据执行搜索

java - 使用 Java 继承

javascript - 在浏览器中从 selenium 构建器运行 Mocha 测试

java - reducer 不工作或永不接听电话

java - 在 Azure AD B2C 注册页面上添加自定义电话号码字段

google-app-engine - AppEngine Channel API 的 Amazon EC2 等效项是什么?

amazon-web-services - SQS 是否以异步/同步方式触发 lambda?

amazon-web-services - 无法将导入的证书选择到 AWS 负载均衡器监听器中

jdbc - Elasticsearch river 插件的替代品