УсловияАгрегация по массиву - PullRequest
0 голосов
/ 08 февраля 2020

есть проблема с полем индекса, в котором хранится список строк в виде

["abc_def_fgh", "abc_def_fgh", "123_345_456"]

Я пытаюсь использовать TermsAggregation получить

"abc_def_fgh" (2) "123_345_456" (1)

Но не могу заставить его работать, так как это приводит к подсчету для каждого из терминов (ab c (2) , def (2), et c)

Есть идеи?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Попробуйте что-то вроде

var result = await client.SearchAsync<Document>(s => s
    .Size(0)
    .Aggregations(a => a
        .Terms("tags", t => t.Field(f => f.Tags.Suffix("keyword")))));

foreach (var bucket in result.Aggregations.Terms("tags").Buckets)
{
    System.Console.WriteLine($"Tag {bucket.Key}, doc count: {bucket.DocCount}");
}

public class Document
{
    public string Id { get; set; }
    public string[] Tags { get; set; } = { };
}

для этих трех документов в моем индексе

new Document {Id = "1", Tags = new[]{"a","b"}
new Document {Id = "2", Tags = new[]{"a"}
new Document {Id = "3", Tags = new[]{"c"}

будет выведено

Tag a, doc count: 2
Tag b, doc count: 1
Tag c, doc count: 1

Надеюсь, что поможет.

0 голосов
/ 14 февраля 2020

Это похоже на проблему с отображением. Вы должны убедиться, что вы используете keyword вместо text. Вы не хотите, чтобы поле анализировалось при использовании агрегатов.

...