小编Sum*_*mar的帖子

ElasticSearch - 如何在聚合查询中显示其他字段名称

如何在输出存储桶中添加名为"agency_name"的新密钥.

我正在运行聚合代码,如下所示

{
  "aggs": {
    "name": {
      "terms": {
        "field": "agency_code"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我将得出结论

"aggregations": {
    "name": {
        "doc_count_error_upper_bound": 130,
        "sum_other_doc_count": 39921,
        "buckets": [
            {
                "key": "1000",
                "doc_count": 105163
            },
            {
                "key": "2100",
                "doc_count": 43006
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

在显示时我需要显示代理商名称,代码和doc_count

如何修改聚合查询以便我可以获得以下格式.我是ElasticSearch的新手,不知道如何解决这个问题

"aggregations": {
    "name": {
        "doc_count_error_upper_bound": 130,
        "sum_other_doc_count": 39921,
        "buckets": [
            {
                "key": "1000",
                "doc_count": 105163,
                "agency_name": 'Agent 1'
            },
            {
                "key": "2100",
                "doc_count": 43006,
                "agency_name": 'Agent 2'
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

ElasticSearch中的示例数据(分析字段)

{

    "_index": "feeds",
    "_type": "news", …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

21
推荐指数
2
解决办法
7324
查看次数

如何在 Visual Studio Code 的侧边栏中排除除某些文件之外的所有文件?

使用 Microsoft 的 Visual Studio Code,如何在侧边栏中仅显示某些文件和文件模式并排除所有其他文件?

我想显示.yml文件以实现仅编辑它们而不是滚动浏览所有文件。

我尝试过这个,但没有成功。

"files.exclude": {
    "**/*": true,
    "**/*.yml": false
}
Run Code Online (Sandbox Code Playgroud)

PS 我知道有一种方法可以隐藏某些文件,但我只想显示特定文件。我不介意使用扩展来实现这一点。

visual-studio-code

10
推荐指数
1
解决办法
4446
查看次数

Elasticsearch日期格式

我正在尝试将以下JSON输入发送到elasticsearch,但我正在获取解析器错误.

这是JSON输入

{
    "chassisNumber": "654321",
    "position": "40.480143, -3.688960",
    "issue": "Position",
    "timestamp": "2016-07-15T15:29:50+02:00[Europe/Paris]"
}
Run Code Online (Sandbox Code Playgroud)

索引定义

{
   "mappings":{
      "vehicle":{
         "properties":{
            "vehicle":{
               "type":"string"
            },
            "position":{
               "type": "geo_point"
            },
            "issue":{
               "type":"string"
            },
            "timestamp":{
               "type":"date",
               "format":"YYYY-MM-DD'T'HH:mm:ssZ"
            }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

以及与"timestamp"字段相关的错误.

"reason": "Invalid format: \"2016-07-15T15:29:50+02:00[Europe/Paris]\" is malformed at \"[Europe/Paris]\""
Run Code Online (Sandbox Code Playgroud)

我尝试了一些日期格式,但没有人成功.任何人都可以帮我定义正确的格式来解析elasticsearch中的"timestamp"字段吗?

谢谢!!!

datetime timestamp datetime-format elasticsearch

9
推荐指数
1
解决办法
5万
查看次数

跨多个索引的多个字段的 Elasticsearch 聚合

我有两个索引 - 一个用于Application模型,另一个用于Databases模型(多对多关系)。

每个文档都被非规范化以包含来自另一个模型的属性

Application
          |_ vendor_name
          |_ databases
                 |_ db_1
                 |_ db_2


Database
       |_ database_applications
                 |_ app_1
                        |_vendor_name
                 |_ app_2
                        |_ vendor_name
Run Code Online (Sandbox Code Playgroud)

对供应商名称执行多索引搜索 - 似乎我从两个索引中都得到了正确的结果。

挑战在 vendor_name 字段上正确聚合

当结果仅来自数据库时,使用以下聚合似乎有效。我也尝试过,field: '*vendor_name'但似乎不起作用。

我错过了什么?模型应该改变吗?

   aggregation:
       vendor_name: {
            terms: {
                field: "database_applications.vendor_name"
            }
        }
Run Code Online (Sandbox Code Playgroud)

更新1:

根据@Andrie-Stefan - 这是两个索引映射的更准确表示(缩写为简短):

数据库

Application
          |_ vendor_name
          |_ databases
                 |_ db_1
                 |_ db_2


Database
       |_ database_applications
                 |_ app_1
                        |_vendor_name
                 |_ app_2
                        |_ vendor_name
Run Code Online (Sandbox Code Playgroud)

应用

{
  "applications": {
    "aliases": {},
    "mappings": {
      "application": …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

8
推荐指数
1
解决办法
7223
查看次数

返回弹性搜索中的唯一结果

我有一个用例,其中我有数据

{
    name: "John",
    parentid": "1234",
    filter: {a: '1', b: '3', c: '4'}
},
{
    name: "Tim",
    parentid": "2222",
    filter: {a: '2', b: '1', c: '4'}
},
{
    name: "Mary",
    parentid": "1234",
    filter: {a: '1', b: '3', c: '5'}
},
{
    name: "Tom",
    parentid": "2222",
    filter: {a: '1', b: '3', c: '1'}
}
Run Code Online (Sandbox Code Playgroud)

预期成绩:

bucket:[{
    key: "2222",
    hits: [{
        name: "Tom" ...
    }, 
    {
        name: "Tim" ...
    }]
},
{
    key: "1234",
    hits: [{
        name: "John" ...
    },
    {
        name: …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

7
推荐指数
1
解决办法
1018
查看次数

Elasticsearch 聚合将结果转为小写

我一直在玩 ElasticSearch,在进行聚合时发现了一个问题。

我有两个端点,/A/B。在第一个我有第二个的父母。因此,B 中的一个或多个对象必须属于 A 中的一个对象。因此,B 中的对象具有属性“parentId”,其父索引由 ElasticSearch 生成。

我想通过 B 的子属性过滤 A 中的父项。为了做到这一点,我首先按属性过滤 B 中的子项并获取其唯一的父 ID,稍后我将使用它来获取父 ID。

我发送这个请求:

POST http://localhost:9200/test/B/_search
{
    "query": {
        "query_string": {
            "default_field": "name",
            "query": "derp2*"
        }
    },
    "aggregations": {
        "ids": {
            "terms": {
                "field": "parentId"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并得到这个回应:

{
  "took": 91,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 1,
    "hits": [
      {
        "_index": "test",
        "_type": "child",
        "_id": "AU_fjH5u40Hx1Kh6rfQG",
        "_score": 1, …
Run Code Online (Sandbox Code Playgroud)

lowercase analyzer elasticsearch elasticsearch-aggregation

5
推荐指数
1
解决办法
4157
查看次数

使用ElasticSearch的script_upsert创建文档

根据官方文档Update API-Upserts,可以使用scripted_upsert该脚本处理脚本中的更新(对于现有文档)或插入(对于新文档)表格。问题是它们从不显示脚本应如何执行此操作。在爪哇-更新API没有对ScriptUpsert用途的任何信息。

这是我正在使用的代码:

//My function to build and use the upsert
public void scriptedUpsert(String key, String parent, String scriptSource, Map<String, ? extends Object> parameters) {
    Script script = new Script(scriptSource, ScriptType.INLINE, null, parameters);
    UpdateRequest request = new UpdateRequest(index, type, key);
    request.scriptedUpsert(true);
    request.script(script);
    if (parent != null) {
        request.parent(parent);
    }
    this.bulkProcessor.add(request);
}

//A test call to validate the function
String scriptSource = "if (!ctx._source.hasProperty(\"numbers\")) {ctx._source.numbers=[]}";
Map<String, List<Integer>> parameters = new HashMap<>();
List<Integer> numbers = new …
Run Code Online (Sandbox Code Playgroud)

java upsert elasticsearch elasticsearch-java-api

5
推荐指数
1
解决办法
1403
查看次数

elasticsearch术语和总和聚合

我在elasticsearch(1.5)中有文档,如下所示:

{
    "gender": [
        {
            "name": "unknown",
            "value": 12
        },
        {
            "name": "male",
            "value": 89
        },
        {
            "name": "female",
            "value": 84
        } 
    ]
}
Run Code Online (Sandbox Code Playgroud)
  • 并非所有文件都包含三个选项(男/女/未知)

我想获得每个性别名称的所有值的总和.像那样:

{
    "buckets": [
        {
            "key": "unknown",
            "doc_count": 112,
            "gender_a": {
                "value": 462
            }
        },
        {
            "key": "male",
            "doc_count": 107,
            "gender_a": {
                "value": 438
            }
        },
        {
            "key": "female",
            "doc_count": 36,
            "gender_a": {
                "value": 186
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我试过这个查询:

{
    "aggs": {
        "gender_name": {
            "terms": {
                "field": "gender.name"
            },
            "aggs": {
                "gender_sum": {
                    "sum": …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-aggregation

1
推荐指数
1
解决办法
1万
查看次数