Не удалось получить никаких результатов при использовании агрегации сегментов - PullRequest
0 голосов
/ 26 января 2020

У меня есть некоторые PR-данные в моем ES. Вот как смоделированы документы

 {
          "Author" : "dheerajrav",
          "Date" : "2012-10-05T10:16:49Z",
          "Number" : 2554441,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        },
        {
          "Author" : "dheerajrav",
          "Date" : "2012-10-05T09:11:35Z",
          "Number" : 2553883,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        },
        {
          "Author" : "crodjer",
          "Date" : "2012-10-04T15:40:22Z",
          "Number" : 2544540,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        },
        {
          "Author" : "crodjer",
          "Date" : "2012-10-04T07:52:20Z",
          "Number" : 2539410,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        }
      .
      .
      .
      ]
    }

Я пытаюсь использовать следующие термины agg в моем индексе, но не получаю результатов

curl -X GET "localhost:9200/newidx/_search?pretty" -H 'Content-Type: application/json' -d'               
{
"aggs" : {
    "contributors" : {
        "terms" : {
            "field" : "Author",
            "size" : 100
        }
    }
  }
}
'

Желаемый результат - отдельные сегменты для каждого Пиар автора. Это ответ

 "aggregations" : {
 "contributors" : {
  "doc_count_error_upper_bound" : 0,
  "sum_other_doc_count" : 0,
  "buckets" : [ ]
   }
  }

Я неправильно моделирую свои данные?

Это отображение для моего индекса

{
  "newidx" : {
   "mappings" : {
     "properties" : {
         "Stats" : {
          "properties" : {
           "Author" : {
             "type" : "text",
              "fields" : {
               "keyword" : {
                  "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "Body" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "Date" : {
          "type" : "date"
        },
        "IsMerged" : {
          "type" : "boolean"
        },
        "MergedBy" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "Number" : {
          "type" : "long"
           }
         }
       }
     }
    }
 }
}

Я создаю файл json в мой код и индексировать его вasticsearch с использованиемasticsearch_loader, вот команда

elasticsearch_loader --es-host 'localhost' --index org-skills --type incident json --lines processed.json

Ответы [ 2 ]

1 голос
/ 27 января 2020

На основе вашего сопоставления:

  1. Author поле объявлено как text (используется для полнотекстового поиска) и keyword (используется для сопоставления целых значений).

    Считать разницу между text v / s keyword.

  2. Имя родительского сопоставления Stats.

Поэтому вы должны использовать Stats.Author.keyword в запросе агрегации, то есть:

curl -X GET "localhost:9200/newidx/_search?pretty" -H 'Content-Type: application/json' -d'               
{
"aggs" : {
    "contributors" : {
        "terms" : {
            "field" : "Stats.Author.keyword",
            "size" : 100
        }
    }
  }
}
'
0 голосов
/ 27 января 2020

Это должно быть

curl -X GET "localhost:9200/newidx/_search?pretty" -H 'Content-Type: application/json' -d'               
{
  "aggs" : {
     "contributors" : {
       "terms" : {
         "field" : "Stats.Author.keyword",
         "size" : 100
        }
      }
    }
  }
'

Ваше поле Stats.Author имеет тип text. Для использования агрегатов текстовые поля также должны быть ключевыми словами. Поэтому вам нужно использовать поле Stats.Author.keyword

...