我必须在具有该术语的所有匹配文档中找到当前术语的频率,例如:“sky”。例如:如果doc1有一个句子,
“天空是蓝色的。天空是蓝色的。”
和doc2有一个句子,
“飞机在天空中飞翔”。
然后术语“天空”的总频率应为3.我发现这里提到的termvectors:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html 它是Python API,http://elasticsearch-py.readthedocs.io/en/master/api.html?highlight=term%20vector#elasticsearch.Elasticsearch.termvectors
但是当我尝试实施它时:
es.search(index="abc", body={"from":0, "size":0,"term vectors":{"fields":["sky"],"field_statistics":"true"}})
我收到错误:
引发HTTP_EXCEPTIONS.get(status_code,TransportError)(status_code,error_message,additional_info) elasticsearch.exceptions.RequestError:TransportError(400,u'parsing_exception',[术语向量]中START_OBJECT的u'Unknown键。)
答案 0 :(得分:0)
查看此页面 - > https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html#_behaviour
示例:
(hammer)
“fields”应包含文档中字段的名称(“text”,“fullname”或类似内容)。此请求返回所有单词的统计信息。我不确定您是否可以获取所选单词的统计信息
答案 1 :(得分:0)
出于我的目的,我从不使用termvector
,因为我在其他处理后检索统计信息,因此我使用mtermvector
。它与termvector
相同,但它适用于ID列表。如果您有一份符合" sky"的文件的所有ID的列表。你可以这样做:
from elasticsearch import Elasticsearch
es = Elasticsearch()
index = "abc"
my_doc_type ="your_doc_type"
ids = []
result = es.search(index="abc", doc_type=my_doc_type, body={"query": {"term": {"field": "sky"}}})
for res in result['hits']['hits']:
ids.append(res['_id'])
for doc in es.mtermvectors(index=index,doc_type=doc_type,body=dict(ids=ids,parameters=dict(term_statistics=True,field_statistics=True,fields=fields)))['docs']:
fields = doc['term_vectors']
terms = field['terms']
tf = vec["term_freq"]
df = vec["doc_freq"]