我有一个临时索引包含我需要缓和的文档.我想用它们包含的单词对这些文档进行分组.
例如,我有这些文件:
1 - "aaa bbb ccc ddd eee fff"
2 - "bbb mmm aaa fff xxx"
3 - "hhh aaa fff"
所以,我想得到最受欢迎的词,理想情况是:"aaa" - 3,"fff" - 3,"bbb" - 2等.
弹性搜索有可能吗?
Oll*_*ank 14
进行简单的术语聚合搜索将满足您的需求:
(mydata你的领域名称在哪里)
curl -XGET 'http://localhost:9200/test/data/_search?search_type=count&pretty' -d '{
"query": {
"match_all" : {}
},
"aggs" : {
"mydata_agg" : {
"terms": {"field" : "mydata"}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
将返回:
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"mydata_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : "aaa",
"doc_count" : 3
}, {
"key" : "fff",
"doc_count" : 3
}, {
"key" : "bbb",
"doc_count" : 2
}, {
"key" : "ccc",
"doc_count" : 1
}, {
"key" : "ddd",
"doc_count" : 1
}, {
"key" : "eee",
"doc_count" : 1
}, {
"key" : "hhh",
"doc_count" : 1
}, {
"key" : "mmm",
"doc_count" : 1
}, {
"key" : "xxx",
"doc_count" : 1
} ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
可能是因为这个问题和公认的答案已经有些年头了,但现在有更好的方法。
接受的答案没有考虑到最常见的词通常是无趣的这一事实,例如“the”、“a”、“in”、“for”等停用词。
这通常适用于包含 typetext而非数据的字段keyword。
这就是为什么 ElasticSearch 实际上有一个专门用于此目的的聚合,称为“重要文本聚合”。
从文档:
text字段但是,它可能比其他类型的查询花费更长的时间,因此建议在使用 query.match 或先前的采样器类型聚合过滤数据后使用它。
因此,在您的情况下,您将发送这样的查询(省略过滤/采样):
{
"aggs": {
"keywords": {
"significant_text": {
"field": "myfield"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5965 次 |
| 最近记录: |