2015-06-19 70 views
0

我正在从java应用程序索引请求日志,并且日志包含关键方法名称和时间。该方法的名字就像Java方法名称分析器

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

完整的方法名为了寻找一个方法名称或类型(如GetFiles的或文件)我相信我需要使其标记化的封装和方法名,来定义分析。这种分析仪是否已经存在?

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

寻找其他建议,想法以及。

+0

你看看[烟灰(HTTP://sable.github .IO /烟灰/)?它是一个静态分析仪,可以给你你所需要的和更多! –

回答

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" 
    } 
    } 
} 
+0

谢谢,听起来像模式分析器是我所需要的(https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-analyzer.html) – Raylite3

0

代码是您的项目的一部分,还是您刚刚在输入中读取的内容?

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