文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中Term Vector的概念和使用方法是什么

2023-06-03 16:52

关注

本篇内容主要讲解“Java中Term Vector的概念和使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中Term Vector的概念和使用方法是什么”吧!

term vector是什么?

每次有document数据插入时,elasticsearch除了对document进行正排、倒排索引的存储之外,如果此索引的field设置了term_vector参数,elasticsearch还会对这个的分词信息进行计算、统计,比如这个document有多少个field,每个field的值分词处理后得到的term的df值,ttf值是多少,每个term存储的位置偏移量等信息,这些统计信息统称为term vector。term vector的值有5个

term vector的信息生成有两种方式:index-time和query-time。index-time即建立索引时生成term vector信息,query-time是在查询过程中实时生成term vector信息,前者以空间换时间,后者以时间换空间。

Java中Term Vector的概念和使用方法是什么

term vector有什么作用?

term vector本质上是一个数据探查的工具(可以看成是一个debugger工具),上面记录着一个document内的field分词后的term的详细情况,如拆分成几个term,每个term在正排索引的哪个位置,各自的df值、ttf值分别是多少等等。一般用于数据疑似问题的排查,比如说排序和搜索与预期的结果不一致,需要了解根本原因,可以拿这个工具手动进行数据分析,帮助判断问题的根源。

读懂term vector信息

我们来看看一个完整的term vector报文,都有哪些信息,带#号的一行代码是添加的注释,如下示例:

{
 "_index": "music",
 "_type": "children",
 "_id": "1",
 "_version": 1,
 "found": true,
 "took": 0,
 "term_vectors": {
   "text": {
     "field_statistics": {
       "sum_doc_freq": 3,
       "doc_count": 1,
       "sum_ttf": 3
     },
     "terms": {
       "elasticsearch": {
         "doc_freq": 1,
         "ttf": 1,
         "term_freq": 1,
         "tokens": [
           {
             "position": 2,
             "start_offset": 11,
             "end_offset": 24
           }
         ]
       },
       "hello": {
         "doc_freq": 1,
         "ttf": 1,
         "term_freq": 1,
         "tokens": [
           {
             "position": 0,
             "start_offset": 0,
             "end_offset": 5
           }
         ]
       },
       "java": {
         "doc_freq": 1,
         "ttf": 1,
         "term_freq": 1,
         "tokens": [
           {
             "position": 1,
             "start_offset": 6,
             "end_offset": 10
           }
         ]
       }
     }
   }
 }
}

一段完整的term vector信息,term vector是按field为维度来统计的,主要包含三个部分:

field statistics

指该索引和type下所有的document,对这个field所有term的统计信息,注意document的范围,不是某一条,是指定index/type下的所有document。

term statistics

hello为当前document中,text field字段分词后的term,查询时设置term_statistics=true时生效。

term information

示例中tokens里面的内容,tokens里面是个数组

term vector使用案例

  1. 建立索引music,type命名为children,指定text字段为index-time,fullname字段为query-time

PUT /music
{
 "mappings": {
   "children": {
     "properties": {
       "content": {
           "type": "text",
           "term_vector": "with_positions_offsets",
           "store" : true,
           "analyzer" : "standard"
        },
        "fullname": {
           "type": "text",
           "analyzer" : "standard"
       }
     }
   }
 }
}
  1. 添加3条示例数据

PUT /music/children/1
{
 "fullname" : "Jean Ritchie",
 "content" : "Love Somebody"
}

PUT /music/children/2
{
 "fullname" : "John Smith",
 "content" : "wake me, shark me ..."
}
PUT /music/children/3
{
 "fullname" : "Peter Raffi",
 "content" : "brush your teeth"
}
  1. 对document id为1这条数据进行term vector探查

GET /music/children/1/_termvectors
{
 "fields" : ["content"],
 "offsets" : true,
 "positions" : true,
 "term_statistics" : true,
 "field_statistics" : true
}

得到的结果即为上文的term vector示例。另外可以提一下,用这3个document的id进行查询,field_statistics部分是一样的。

term vector常见用法

除了上一节的标准查询用法,还有一些参数可以丰富term vector的查询。

GET /music/children/_termvectors
{
 "doc" : {
   "fullname" : "Peter Raffi",
   "content" : "brush your teeth"
 },
 "fields" : ["content"],
 "offsets" : true,
 "positions" : true,
 "term_statistics" : true,
 "field_statistics" : true
}

这个语法的含义是针对指定的doc进行term vector分析,doc里的内容可以随意指定,特别实用。

GET /music/children/_termvectors
{
 "doc" : {
   "fullname" : "Jimmie Davis",
   "content" : "you are my sunshine"
 },
 "fields" : ["content"],
 "offsets" : true,
 "positions" : true,
 "term_statistics" : true,
 "field_statistics" : true,
 "per_field_analyzer" : {
   "text": "standard"
 }
}
GET /music/children/_termvectors
{
 "doc" : {
   "fullname" : "Jimmie Davis",
   "content" : "you are my sunshine"
 },
 "fields" : ["content"],
 "offsets" : true,
 "positions" : true,
 "term_statistics" : true,
 "field_statistics" : true,
 "filter" : {
     "max_num_terms" : 3,
     "min_term_freq" : 1,
     "min_doc_freq" : 1
   }
}

根据term统计信息,过滤出你想要看到的term vector统计结果。也挺有用的,比如你探查数据可以过滤掉一些出现频率过低的term。

GET _mtermvectors
{
  "docs": [
     {
        "_index": "music",
        "_type": "children",
        "_id": "2",
        "term_statistics": true
     },
     {
        "_index": "music",
        "_type": "children",
        "_id": "1",
        "fields": [
           "content"
        ]
     }
  ]
}

term vector使用建议

有两种方式可以得到term vector信息,一种是像上面案例,建立时指定,另一种是直接查询时生成

这两种方式采用哪种取决于对term vector的使用期望,query-time更常用一些,毕竟这个工具的用处是协助定位问题,实时计算就行。

到此,相信大家对“Java中Term Vector的概念和使用方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯