返回顶部
首页 > 资讯 > 精选 >Java中Term Vector的概念和使用方法是什么
  • 550
分享到

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

2023-06-03 16:06:44 550人浏览 安东尼
摘要

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

本篇内容主要讲解“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个

  • no:不存储term vector信息,默认值

  • yes:只存储field terms信息,不包含position和offset信息

  • with_positions:存储term信息和position信息

  • with_offsets:存储term信息和offset信息

  • with_positions_offsets:存储完整的term vector信息,包括field terms、position、offset信息。

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

  • term statistics

  • term infORMation

field statistics

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

  • sum_doc_freq(sum of document frequency):这个field中所有的term的df之和。

  • doc_count(document count):有多少document包含这个field,有些document可能没有这个field。

  • sum_ttf(sum of total term frequency):这个field中所有的term的tf之和。

term statistics

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

  • doc_freq(document frequency):有多少document包含这个term。

  • ttf(total term frequency):这个term在所有document中出现的频率。

  • term_freq(term frequency in the field):这个term在当前document中出现的频率。

term information

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

  • position:这个term在field里的正排索引位置,如果有多个相同的term,tokens下面会有多条记录。

  • start_offset:这个term在field里的偏移,表示起始位置偏移量。

  • end_offset:这个term在field里的偏移量,表示结束位置偏移量。

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的查询。

  • doc参数

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里的内容可以随意指定,特别实用。

  • per_field_analyzer参数
    可以指定字段的分词器进行探查

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"
 }
}
  • filter参数
    对term vector统计结果进行过滤

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。

  • docs参数
    允许你同时对多个doc进行探查,这个使用频率看个人习惯。

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

term vector使用建议

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

  • index-time,在mapping里配置,建立索引的时候,就直接给你生成这些term和field的统计信息,如果term_vector设置为with_positions_offsets,索引所占的空间是不设置term vector时的2倍。

  • query-time,你之前没有生成过任何的Term vector信息,然后在查看term vector的时候,直接就可以看到了,会on the fly,现场计算出各种统计信息,然后返回给你。

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

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

--结束END--

本文标题: Java中Term Vector的概念和使用方法是什么

本文链接: https://lsjlt.com/news/235102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中Term Vector的概念和使用方法是什么
    本篇内容主要讲解“Java中Term Vector的概念和使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中Term Vector的概念和使用方法是什么”吧!term vec...
    99+
    2023-06-03
  • ThinkPHP封装方法的概念和使用方法是什么
    今天小编给大家分享一下ThinkPHP封装方法的概念和使用方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是封装...
    99+
    2023-07-05
  • Spring Bean的定义概念和使用方法是什么
    本篇内容介绍了“Spring Bean的定义概念和使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义Spring b...
    99+
    2023-07-06
  • Java中的魔法值概念是什么
    本文小编为大家详细介绍“Java中的魔法值概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的魔法值概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Java中的魔法值背景使用IDEA时,...
    99+
    2023-06-29
  • Java中弱引用的概念和作用是什么
    本篇内容介绍了“Java中弱引用的概念和作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概览本文会通过对弱引用的定义讲起,然后通过案...
    99+
    2023-06-16
  • C#中委托的概念与使用方法是什么
    本篇内容主要讲解“C#中委托的概念与使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中委托的概念与使用方法是什么”吧!委托的概念委托这个名字取的神乎其神的,但实质是函数式编程,把...
    99+
    2023-07-05
  • java中锁的概念是什么
    java中锁的概念是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;...
    99+
    2023-06-14
  • java中void的概念是什么
    这篇文章主要介绍了java中void的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中void的概念是什么文章都会有所收获,下面我们一起来看看吧。在java中,void是“空”的意思,即“什么...
    99+
    2023-07-05
  • java中string的概念是什么
    这篇文章主要介绍了java中string的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中string的概念是什么文章都会有所收获,下面我们一起来看看吧。在java中,string是字符串的意...
    99+
    2023-07-05
  • java集合的概念和作用是什么
    Java集合是用于存储和操作一组对象的数据结构。它提供了一组类和接口,用于处理不同类型的数据集合,包括列表、集合和映射等。Java集...
    99+
    2023-09-25
    java
  • JavaScript中Promise的基本概念及使用方法是什么
    本篇内容主要讲解“JavaScript中Promise的基本概念及使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中Promis...
    99+
    2024-04-02
  • java构造方法重载的概念是什么
    在Java中,构造方法重载是指在同一个类中可以定义多个具有相同名称但参数列表不同的构造方法。 构造方法是一种特殊的方法,用于创建和初...
    99+
    2023-10-24
    java
  • cookie的概念是什么和怎么使用
    这篇“cookie的概念是什么和怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“cookie的概念是什么和怎么使用”文...
    99+
    2023-06-27
  • java中并发和并行的概念是什么
    这篇文章主要介绍了java中并发和并行的概念是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可...
    99+
    2023-06-14
  • JDK,JRE,JVM概念是什么及使用方法
    这篇文章给大家介绍JDK,JRE,JVM概念是什么及使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。向大家简单介绍一下JDK,JRE,JVM概念及用法,为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE...
    99+
    2023-06-17
  • C#中静态方法的概念是什么
    这期内容当中小编将会给大家带来有关C#中静态方法的概念是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例。非静态方法可以访问类中的任何成员,...
    99+
    2023-06-17
  • java中重载的概念是什么
    在Java中,重载(Overloading)是指在同一个类中定义多个方法,这些方法具有相同的名称但具有不同的参数列表。重载方法可以具...
    99+
    2023-09-01
    java
  • Java中io流的概念是什么
    在Java中,I/O流是用于处理输入和输出的一种机制。它允许程序从输入源读取数据,并将数据写入输出源。I/O流可以用于读取和写入文件...
    99+
    2024-02-29
    Java
  • java中@SuppressWarnings的概念是什么及怎么用
    本文小编为大家详细介绍“java中@SuppressWarnings的概念是什么及怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“java中@SuppressWarnings的概念是什么及怎么用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
  • PHP中时间戳的概念和转化方法是什么
    本篇内容主要讲解“PHP中时间戳的概念和转化方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中时间戳的概念和转化方法是什么”吧!一、时间戳的概念在计算机世界中,时间戳是一种表示日期...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作