ElasticSearch之termvector介绍

termvector会获取document中的某个field内的各个term的统计信息。

一 term的基本信息

 term_freq:term在该字段中的频率

 position:词在该字段中的位置

 start_offset:从什么偏移量开始的

 end_offset: 到什么偏移量结束

二 term的统计信息

如果启用了term的统计信息,即term_statistics设为true,那么有哪些统计信息呢?

 doc_freq: 该词在文档中出现的频率

 ttf:total term frequency的缩写,一个term在所有document中出现的频率

三 字段的统计信息

如果启用了字段统计信息,即field_statistics设为true,那么有哪些统计信息呢?

 sum_doc_freq: 一个field中所有term的df之和

 doc_count: 有多少个文档包含这个字段

 sum_ttf:sum total term frequency的缩写, 一个field中的所有term的tf之和

term statistics和field statistics并不精准,不会被考虑有的doc可能被删除了

四 采集term信息的方式

采集term信息的方式有两种:index-time 和 query-time

4.1 index-time方式

需要在mapping配置一下,然后建立索引的时候,就直接生成这些词条和文档的统计信息

PUT /website

{
	"mappings": {
		"article": {
		   "properties": {
				"text": {
					"type": "text",
					"term_vector": "with_positions_offsets",
					"store": "true",
					"analyzer": "fulltext"
				}
			}
		}
	},
	"settings": {
		"analysis": {
			"analyzer": {
				"fulltext": {
					"type": "custom",
					"tokenizer": "whitespace",
					"filter": [
						"lowercase",
						"type_as_payload"
					]
				}
			}
		}
	}
}

term_vector(词向量):该属性的取值可以为no(默认值)、yes、with_offsets、with_positions、with_positions_offsets。该属性表示是否对该字段计算lucene词向量,如果使用的是高亮则需要计算词向量。

4.2 query-time方式

即之前没有在mapping里配置过,而是通过查询的方式产生这些统计信息


curl -XGET 'http://localhost:9200/twitter/tweet/1/_termvectors?fields=text'
或者
POST /ecommerce/music/1/_termvectors

{
  "fields":["desc"],
  "offsets":true,
  "payloads":true,
  "positions":true,
  "term_statistics":true,
  "field_statistics" : true
}

五 手动指定analyzer来生成termvector

我么可以通过指定per_field_analyzer设置一个分词器对该字段文本进行分词。

POST /ecommerce/music/1/_termvectors
{
    "fields":["desc"],
    "offsets":true,
    "payloads":true,
    "positions":true,
    "term_statistics":true,
    "field_statistics" : true,
    "per_field_analyzer":{
    "text":"standard"
}
}

六 过滤term的统计信息

我们可以根据term的统计信息,过滤出我么想看的统计结果,比如过滤掉一些出现频率过低的term,比如我要过滤出该字段最多只有10个term,而且那些term在该字段中出现的频率为2,且

POST /ecommerce/music/1/_termvectors

{
"fields":["desc"],
"offsets":true,
"payloads":true,
"positions":true,
"term_statistics":true,
"field_statistics" : true,
"filter":{
    "max_num_terms":10,
    "min_term_freq" : 2,
    "min_doc_freq" : 1
}
}

注意:默认这些统计信息是基于分片的,可以设置dfs为true,返回全部分片的信息,但是会有一定的性能问题,所以不推荐使用。还可以使用field字段对返回的统计信息的字段进行过滤,只返回感兴趣的那部分内容。

参考:https://www.cnblogs.com/xing901022/p/5348737.html

https://www.2cto.com/net/201711/698054.html



你可能感兴趣的:(elk)