【问题标题】:Elasticsearch: JSON to get frequency of specific termElasticsearch:JSON获取特定术语的频率
【发布时间】:2020-02-12 21:10:47
【问题描述】:

我认为这是一个简单的应用程序,但我在互联网上找不到食谱。

您能否建议一个 JSON 查询通过 python 发送到 Elasticsearch 实例,该实例将返回特定字段中特定术语的频率?

我想这应该可以通过 Term Vector API 的一些调整来实现,但这似乎并不简单。

我不介意同时获取绝对频率和包含该术语的文档数量。

【问题讨论】:

  • 那么有没有直接的办法呢?我必须先获取 docid,然后对它们进行计数或汇总每个术语的所有 tf​​?

标签: elasticsearch word-frequency term-vectors


【解决方案1】:

如果你有 id,你可以使用 Multivectors API https://www.elastic.co/guide/en/elasticsearch/reference/6.8/docs-multi-termvectors.html

curl -X POST "localhost:9200/index/type/_mtermvectors?pretty" -H 'Content-Type: application/json' -d' 
{
    "ids" : ["your_document_id1","your_document_id2"],      
    "parameters": {
        "fields": [
                "your_field"       
        ],
        "term_statistics": true
    }
}
'

您甚至可以传递包含您要分析的术语的人工文档。如此处所述 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html),确保 term_statistics 设置为 true,以便您可以在索引中获取此信息:

  • 总词频(一个词在所有文档中出现的频率)
  • 文档频率(包含当前术语的文档数量)

【讨论】:

  • 谢谢,您能否通过指定“ID”(document_ids 或 term_ids)的含义来完成此答案?如果它指的是术语 ID,如何在给定实际术语字符串的情况下检索它们。如果它指的是文档 ID,如何获取所有文档 ID 或(为了提高效率)如何获取相应术语的文档 ID(我想这也在链接中)。
  • 我的意思是文档 ID(更新了答案)。我认为您无法获取所有文档的频率术语,但您似乎可以将人工文档传递给带有您要检查的术语的多术语向量 api。这与将 term_statistics 设置为 true 相结合,我认为您可以从所需的内容中获得最接近的解决方案。
【解决方案2】:

其实有一个简单的解决方案,是这样的:

from elasticsearch import Elasticsearch as ES
from copy import deepcopy as copy
import sys

_field = sys.argv[1]
_terms = sys.argv[2:]

_timeout = 60
_gate    = 'some.gate.org/'
_index   = 'some_index'
_client  = ES([_gate],scheme='http',port=80,timeout=_timeout) #or however to get connection

_body= {"doc": {_field: None}, "term_statistics" : True, "field_statistics" : True, "positions": False, "offsets": False}

for term in terms_:
    body   = copy(_body); body["doc"][_field] = term
    result = _client.termvectors(index=_index,body=body)
    print 'documents with', term, ':', result['term_vectors'][_field]['terms'][term]['doc_freq']
    print 'frequency of  ', term, ':', result['term_vectors'][_field]['terms'][term]['ttf']

【讨论】:

    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多