9.2.4 Term Vector
返回一个特定文档的信息和字段的统计信息,这里的文档可以索引中存储的文档,也可以是用户手动提供的,Term vector默认是实时的(而不是接近实时),这可以通过realtime=false
进行更改,下面是个小栗子:
GET /twitter/_doc/1/_termvectors
// 也可以使用url中的参数指定为检索信息的字段
GET /twitter/_doc/1/_termvectors?fields=message
或者也可以在请体中添加请求字段,还可以使用通配符匹配指定的字段,注意/_termvector
在ES 2.0中就已经被弃用了,替换为/_termvectors
。
返回值
有三类值可以被请求:term information, term statistics and field statistics,默认情况下,所有的term information和字段statistics都会被返回,但term statistics不返回。
term information
- 字段中term的频率(总是被返回);
- term的定位(
positions
: true); - 开始和偏移(
offsets
: true); - term payloads(
payloads
: true)作为base64编码字节。
如果请求信息没有存储在索引中,如果可能的话它将在运行时计算。此外,trem vetors可以不仅仅计算索引中已存在的文档,而且可以包含用户提供的文档。
Term statistics(Term统计信息,即将该某个字段里面的单词全都拆开成独立的单词进行分析)
将term_statistics
设置为true
将会返回这个Term statistics:
term_freq
(total term frequency),term的频率(在当前文档中该term出现的次数);doc_freq
(document frequency)文档频率(包含当前term的文档数量,含有该term的文档有多少);ttf
(该term在所有文档中出现的次数)tokens
包含该term的详细信息:position
:以单词为单位(不含空格),一个单词占一个索引,从0开始,表示该term的索引位置;start_offset
:以字符为单位(包含空格),一个字符占一个索引,从0开始,表示该term的第一个字符的索引位置(包含该位置);end_offset
:以字符为单位(包含空格),一个字符占一个索引,从0开始,表示该term的最后一个字符的索引位置(不包含该位置);payload
:主要用于自定字段的权重;
默认情况下,这些值不会被返回,因为term statistics可能会对性能有严重的影响。
Field statistics(字段统计信息)
将field_statistics
(默认为true
)设置为false
将会忽略:
doc_sount
文档数(索引下总共有多少文档包含了这个字段,只要字段名相同就算,字段值不一定要相同);sum_doc_freq
文档频率的总和(在这个字段中所有term的文档频率总和,这里理解下来,每个文档中该字段中总共含有多个单词,将所有包含该字段的文档都这样计算后进行加和即可,注意同一个文档中重复出现的单词只算一次,不同文档中含有相同单词可以重复算);sum_ttf
(sum of total term frequencies)总的term频率之和(在该字段中每个trem的总频率之和,我自己理解下来就是每个文档中该字段中总共含有多个单词,将所有包含该字段的文档都这样计算后进行加和,这里不管同一文档中对应字段中的单词是否重复);
Terms Filtering
使用filter
参数,还可以根据其 tf-idf 的分数过滤返回的term,这对于找出文档的良好特征 term 可能是有用的,下面是支持的子参数:
|
每个字段必须返回的最大term数量,默认 |
|
忽略源文档中低于此频率的单词,默认 |
|
忽略源文档中超过此频率的单词,默认无界 |
|
忽略至少在这么多文档中没有出现的术语,默认 |
|
忽略超过这么多文档中出现的单词,默认无界 |
|
最小字长,低于该字长将被忽略,默认 |
|
最大字长,高于该字长将被忽略,默认无界 ( |
行为
term和字段统计并不是准确的,删除的文档也是计算到里面的,仅为请求的文档所在的分片检索信息。因此,term和字段统计仅用作相对度量,而绝对数量在此上下文中没有意义。默认情况下,当人造文档请求term vector,从随机选择的碎片中获取统计信息,使用routing
取寻找命中特定的碎片。
案例1:返回存储的term vetors
// 1.创建一个存储了term vectors的索引
PUT /twitter/
{
"mappings": {
"_doc": {
// 文档类型
"properties": {
// 文档各个属性字段的定义
"text": {
"type": "text",
"term_vector": "with_positions_offsets_payloads",
"store" : true,
"analyzer" : "fulltext_analyzer"
},
"fullname": {
"type": "text",
"term_vector": "with_positions_offsets_payloads",
"analyzer" : "fulltext_analyzer"
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
},
"analysis": {
"analyzer": {
"fulltext_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",