Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 使用Elasticsearch和Java进行聚合_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Java - Fatal编程技术网 elasticsearch 使用Elasticsearch和Java进行聚合,elasticsearch,java,elasticsearch,Java" /> elasticsearch 使用Elasticsearch和Java进行聚合,elasticsearch,java,elasticsearch,Java" />

elasticsearch 使用Elasticsearch和Java进行聚合

elasticsearch 使用Elasticsearch和Java进行聚合,elasticsearch,java,elasticsearch,Java,我是ES新手,现在我有了基本的查询和批量插入。我想添加一个聚合来计算整个数据库中出现的单词对,以便以后计算单词密度 数据具有以下格式:- PartNumber, ShopName, WordPair, WordPairCount. 我不确定如何用Java编写聚合。我希望最终结果如下: 之前(默认) 聚合后 A3003, Smiths Shop, 30cm plate, 2 A3001, Johns Shop, 30cm plate, 2 A3005, Johns Shop, 15cm pla

我是ES新手,现在我有了基本的查询和批量插入。我想添加一个聚合来计算整个数据库中出现的单词对,以便以后计算单词密度

数据具有以下格式:-

PartNumber, ShopName, WordPair, WordPairCount. 
我不确定如何用Java编写聚合。我希望最终结果如下:

之前(默认)

聚合后

A3003, Smiths Shop, 30cm plate, 2
A3001, Johns Shop, 30cm plate, 2
A3005, Johns Shop, 15cm plate, 1
加载数据时,计数设置为1,然后我想运行一个聚合,以有效地将PartNumber、ShopName和key上的默认计数相加。因此,最终数据将显示,15cm钢板未被广泛销售,但30cm钢板被广泛销售(在两家商店)

在SQL中,这将是一个简单的GROUPBY,并在联接上进行更新。但是我发现SQL太慢了

我没有测试sql等价物,但我认为应该是这样-

update p
    set p.wordpartcount = w.x
from part p
inner join (
    select wordpair, count(*) as x
from part
group by wordpair
) as w on w.wordpair = p.wordpair
您可以使用以下选项:

SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.client.prepareSearch(name_of_index)
            .setIndices(name_of_index)
            .setTypes(name_of_type)
            .addAggregation(AggregationBuilders.terms("groupByWordPair")
            .field("wordPair").size(0))

    SearchResponse searchResponse = searchRequestBuilder.execute().actionGet()
    StringTerms stringTerms = searchResponse?.aggregations?.asMap?.get("groupByWordPair")
    List<StringTerms.Bucket> bucketList = stringTerms?.buckets
SearchRequestBuilder SearchRequestBuilder=elasticsearchTemplate.client.prepareSearch(索引的名称)
.SETINDEX(索引的名称)
.setTypes(类型的名称)
.addAggregation(AggregationBuilders.terms(“groupByWordPair”)
.field(“字对”).size(0)
SearchResponse SearchResponse=searchRequestBuilder.execute().actionGet()
StringTerms StringTerms=searchResponse?.aggregations?.asMap?.get(“groupByWordPair”)
列表bucketList=stringTerms?.bucket
上面找到的
桶列表
将包含
桶的列表
。每个
bucket
key
作为字对,将
docCount
作为其计数


希望这有帮助。

如果您使用groupByWordPair,上面的结果会出现,因为30厘米有2个计数,15厘米有1个计数。这就是您想要实现的吗?我添加了sql以澄清我的请求。您想要在java中的字对上聚合??是的,使用ES(和java)。
SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.client.prepareSearch(name_of_index)
            .setIndices(name_of_index)
            .setTypes(name_of_type)
            .addAggregation(AggregationBuilders.terms("groupByWordPair")
            .field("wordPair").size(0))

    SearchResponse searchResponse = searchRequestBuilder.execute().actionGet()
    StringTerms stringTerms = searchResponse?.aggregations?.asMap?.get("groupByWordPair")
    List<StringTerms.Bucket> bucketList = stringTerms?.buckets