zoukankan      html  css  js  c++  java
  • Elasticsearch——multi termvectors的用法

    前一篇已经翻译过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 ..."
             }
          }
       ]
    }'
    
  • 相关阅读:
    SpringCloud系列——TX-LCN分布式事务管理
    SpringCloud系列——限流、熔断、降级
    SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
    常用的js、java编码解码方法
    WebSocket数据加密——AES与RSA混合加密
    使用Fiddler重定向App的网络请求
    C# 调用 taskkill命令结束服务进程
    Install .Net Core For CentOS
    cron表达式详解[转]
    WinServer远程部署系统打包批处理文件
  • 原文地址:https://www.cnblogs.com/xing901022/p/5352172.html
Copyright © 2011-2022 走看看