分词和索引
索引方式
日志分析服务最大的优势在于可以对字符串类型的数据进行倒排索引,可以使用搜索引擎的技术对于日志进行索引,并且支持各种灵活的搜索方式。其中索引的方式包括两种:
分字段索引
分字段索引可以允许用户挑选字符串字段,选择灵活的分词和索引方式。可以参考文末的 Lucene 语法(如 log:Error 代表在 log 字段中搜索 Error 单词)
对数据进行搜索、过滤和分析。使用分字段索引的时候可以指定仅仅对某些字段进行分词,降低存储成本,提高写入和检索效率。
全文索引
全文索引表示指定固定的分词索引方式,为所有的字段创建跨字段的索引。
使用全文索引使您在检索的时候直接输入文本即可搜索,如直接在搜索框中输入:
"writepoints"
当然,也可以像分字段索引一样指定查询字段,进行检索,如:
operation:"writepoints"
如果您的字段特别多,或者字段是非常复杂的嵌套结构,此时我们非常推荐您选择全文索引,会使搜索更加便利和灵活。
不过要注意:全文索引会增加存储成本,而且无法在存储时挑选部分字段索引,也无法单独为某些字段设置分词器。
分词方式(analyzer)
您可以根据自己的搜索习惯和需求,对日志中的 field 设置分词方式,目前日志分析服务提供以下几种分词方式:
不分词 (keyword)
不分词的含义其实是“keyword 分词”,意思就是,你必须完整的输入某一个 field 的内容,才能被搜索到,我们举个例子来说明:
假设目前有1个 field 为 A,它的内容是 "abcdefg"
假设我们选择了不分词方式,那么如果想搜索到这一条内容,需要在条件框输入:
A:"abcdefg"
这样才能搜索到,如果我们按照以下几种方式,则无法搜索到:
A:"a"
A:"abc"
A:"edf"
注意:当我们在配置报表和仪表盘的时候,只能使用不分词的字段做分组字段和计算指标。如果字段选择了其他分词方式,将只能进行搜索查询,不能进行分析计算。
不分词不索引 (no)
不分词不索引的含义是指:在任何情况下,输入任何条件,都不会搜索到该 field 的内容,但在搜索其他 field 时,如果是整条搜索,那么这个 field 的内容也会显示出来。
假设现在有 2 个 field,分别为:
A:"abcdefg",B:"12345678"
其中,B 设置了不分词不索引,
无论我们在条件框输入有关B的任何条件,都不会搜索到
标准分词 (standard)
以 unicode 字符作为结束的标识,过滤掉大部分标点符号,将所有字母变为小写,搜索时只要符合搜索条件的词语出现,就会被搜索到。
假设现在有1个 field 为 A,它的内容是 "linux-chrome,what's your&name?"
那么使用标准分词,将会被分为:"linux,chrome,what's,your,name"
我们的搜索条件包含这些词时,会被搜索到
注意:标准分词只适用于英文的文本字段。
空白分词 (whitespace)
以单词头部和尾部的空格作为分割条件,输入两个空格内的完整内容,即可搜索到相应内容。
例:
A="张三 李四 王五"
需要输入以下条件,均可搜到内容:
A:"张三"
A:"李四"
A:"王五"
如果输入以下条件,则无法搜索到内容:
A:"张"
A:"张三 李四"
path分词 (path)
以 linux 系统路径来进行分词,当搜索时,可以输入完整的路径或者路径前缀来进行匹配,如果输入的条件不是一个正确的前缀,那么将无法正确呈现日志内容。
例:
filed A="/usr/local/action.log"
那么需要输入以下条件,均可搜到内容:
A:"/usr"
A:"/usr/local"
A:"/usr/local/action.log"
如果输入以下条件,则无法搜索到内容:
A:"/u"
A:"usr"
A:"/action.log"
中文分词 (index_ansj)
日志分析平台支持使用中文分词器对文本按照中文的语言习惯进行分词。
例:
A="我爱杭州"
中文分词会将该文本切分成"我","爱","杭州"四个词语,输入以下条件,均可搜到内容:
A:"我"
A:"爱"
A:"杭州"