Java方法名称分析器

时间:2015-06-19 17:41:51

标签: java elasticsearch

我正在从java应用程序索引请求日志,日志包含关键方法名称和所用时间。方法名称是完整的方法名称,如

com.example.domain.File[] com.example.service.FolderService.getFiles() throws com.example.Exception

为了搜索方法名称或类型(如getfiles或File),我认为我需要定义一个自定义分析器,以便对包和方法名称进行标记。这样的分析仪是否已经存在?

我确认我可以将字段映射为not_analyzed并使用通配符进行搜索。但是文档说使用通配符不是很有效,建议正确准备索引。

寻找其他建议,想法。

2 个答案:

答案 0 :(得分:0)

代码是您项目的一部分,还是您刚刚作为输入阅读的内容?

如果它在您的项目中,您可以使用reflection完成此操作。 Spring框架能够做到这一点,看看this answer

答案 1 :(得分:0)

我认为你还没有设定所有要求。这就是我的开始:

PUT /index
{
  "settings": {
    "analysis": {
      "filter": {
        "code": {
          "type": "pattern_capture",
          "preserve_original": 1,
          "patterns": [
            "(\\p{Ll}+|\\p{Lu}\\p{Ll}+|\\p{Lu}+)",
            "(\\d+)"
          ]
        }
      },
      "analyzer": {
        "code": {
          "tokenizer": "pattern",
          "filter": [
            "code",
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "test": {
      "properties": {
        "code": {
          "type": "string",
          "analyzer": "code"
        }
      }
    }
  }
}

测试数据:

POST /index/test/1
{
  "code": "com.example.domain.File[] com.example.service.FolderService.getFiles() throws com.example.Exception"
}

查询:

GET /index/test/_search
{
  "query": {
    "match": {
      "code": "File"
    }
  }
}