Elasticsearch——multi termvectors的用法

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

前一篇已经翻译过termvectors的使用方法了,这对于学习如何使用tf-idf来说是很有帮助的了。
更多内容参考我整理的ELK教程

什么是TF-IDF?

今天早晨起来,看《ES IN ACTION》的时候,遇到了这个术语,看英文实在不明白,于是百度了一下。看到了阮一峰的一篇关于它的文章,讲解的十分简单明了,不得不佩服大家的作品,就是不一样。

其实TF-IDF是一种全文检索很常见的算法,即按照关键词以及权重来判断用户想要的是哪一个相关的文档。

比如说,我的名字叫xingoo这句话,想要针对它来做一次全文检索。

第一步,就是对它进行分词,可以分为  名字  xingoo其中是一种停顿词,很多文档中都会出现,因此可以忽略。那么关键词可以变为:名字``xingoo。那么名字``xingoo这两个词出现了多少次,就可以作为TF,即term frequnency,词频。

第二步,如果其他的文档中也会出现名字这种词,而很少会出现xingoo这种个性话的词。因此采用一种逆向权重法,即越少出现的词,越特殊,越能代表这篇文档的特殊性。这个就叫做IDF,即Inverse Document Frequency,你文档频率。

关于他们的计算公式,可以参考阮一峰的文章,很容易理解的!

multi tervectors

再说回官方文档吧,这次介绍的是一次性返回多个查询的termvectors,原理和multi get类似,都是使用一个docs的数组,请求多个index,type,id。

curl 'localhost:9200/_mtermvectors' -d '{
   "docs": [
      {
         "_index": "testidx",
         "_type": "test",
         "_id": "2",
         "term_statistics": true
      },
      {
         "_index": "testidx",
         "_type": "test",
         "_id": "1",
         "fields": [
            "text"
         ]
      }
   ]
}'

索引可以放在url上面,这样docs中就可以忽略,也可以在docs进行覆盖:

curl 'localhost:9200/testidx/_mtermvectors' -d '{
   "docs": [
      {
         "_type": "test",
         "_id": "2",
         "fields": [
            "text"
         ],
         "term_statistics": true
      },
      {
         "_type": "test",
         "_id": "1"
      }
   ]
}'

type也是如此:

curl 'localhost:9200/testidx/test/_mtermvectors' -d '{
   "docs": [
      {
         "_id": "2",
         "fields": [
            "text"
         ],
         "term_statistics": true
      },
      {
         "_id": "1"
      }
   ]
}'

如果索引和类型都一样,只有请求的id不一样,那么可以把id放在一个数组里面:

curl 'localhost:9200/testidx/test/_mtermvectors' -d '{
    "ids" : ["1", "2"],
    "parameters": {
        "fields": [
                "text"
        ],
        "term_statistics": true,
        …
    }
}'

由于termvectors支持用户自己定义的文档,而不是ES中存储的。因此可以按照下面的语法,请求多个自定义的文档进行解析:

curl 'localhost:9200/_mtermvectors' -d '{
   "docs": [
      {
         "_index": "testidx",
         "_type": "test",
         "doc" : {
            "fullname" : "John Doe",
            "text" : "twitter test test test"
         }
      },
      {
         "_index": "testidx",
         "_type": "test",
         "doc" : {
           "fullname" : "Jane Doe",
           "text" : "Another twitter test ..."
         }
      }
   ]
}'
本文转自博客园xingoo的博客,原文链接:Elasticsearch——multi termvectors的用法,如需转载请自行联系原博主。
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
自然语言处理 Java 索引
Elastic Search一些用法
Elastic Search一些用法
|
数据挖掘
白话Elasticsearch35-深入聚合数据分析之案例实战更多metrics用法:统计每种颜色电视最大最小价格
白话Elasticsearch35-深入聚合数据分析之案例实战更多metrics用法:统计每种颜色电视最大最小价格
92 0
|
存储 JSON 关系型数据库
Elasticsearch-04 ES中的术语和基本用法
Elasticsearch-04 ES中的术语和基本用法
94 0
|
JSON API 数据库
ElasticSearch之基本用法API
ElasticSearch之基本用法API
ElasticSearch之基本用法API
|
移动开发 API 网络架构
Elasticsearch Multi Get、 Bulk API详解、原理与示例
Elasticsearch Multi Get、 Bulk API详解、原理与示例
Elasticsearch Multi Get、 Bulk API详解、原理与示例
|
消息中间件 API RocketMQ
elasticsearch使用指南之Elasticsearch Document Multi Get API、Bulk API详解、原理与示例
本文详细介绍如何elasticsearch Multi Get API与Bulk API,并介绍其基本运行原理,最后给出各个API的java示例。
7050 0
|
Java API 索引
Elasticsearch Java API(十)--Multi Get API
使用multi get API可以通过索引名、类型名、文档id一次得到一个文档集合,文档可以来自同一个索引库,也可以来自不同索引库。
838 0