如何在输出存储桶中添加名为"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改进社交媒体文档的结果.查询工作得非常好,最重要的结果始终集中在查询和有趣的元素上.
但是它有一个问题,对于某些查询,第一个结果都来自同一个用户.
如果在更高的文档上检索到相同的用户,我想缩减文档.这样我希望结果更加多样化.
请注意,我不希望它们被删除,因为在某些情况下,查找同一用户的更多文档可能仍然很有趣,但我希望它们处于较低的位置.
任何人都可以建议一种方法来使它工作吗?
正如一些评论中所建议的,我更新了我的查询(简化版):
query = {"function_score": {
"functions": [
{"gauss": {"createdAt":
{"origin": "now", "scale": "30d", "offset": "7d", "decay" :0.9 }
}},
{"gauss": {"shares.last.twitter_retweets_log":
{"origin": 4.52, "scale": 2.61, "decay" : 0.9}
}},
],
"query": {"bool":{"must":[
{"exists":{"field": "images"}},
{"multi_match":{"query": "foo boo", fields:["text", "link.title"]}}
]}},
"score_mode": "multiply"
}};
Run Code Online (Sandbox Code Playgroud)
PS:一些可能有趣的文件,因为他们谈论多样性,但我不知道如何申请:
lucene search-engine elasticsearch elasticsearch-aggregation
目标是构建一个Elasticsearch索引,其中只包含相关文档组中的最新文档,以跟踪某些监视计数器和状态的当前状态.
我制作了一个简单的Elasticsearch聚合查询:
{
"size": 0,
"aggs": {
"group_by_monitor": {
"terms": {
"field": "monitor_name"
},
"aggs": {
"get_latest": {
"top_hits": {
"size": 1,
"sort": [
{
"timestamp": {
"order": "desc"
}
}
]
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它将相关文档分组到存储桶中,并为每个存储桶选择最新文档.
以下是我完成工作所需的不同想法:
hits字段并且无法处理聚合结果:聚合查询可能的输入ES插件!是否有一种相当复杂的方法来实现这一目标?
elasticsearch logstash nest kibana elasticsearch-aggregation
我正在使用Elasticsearch 2.3,我正在尝试使用管道聚合执行两步计算.我只对管道聚合的最终结果感兴趣,但Elasticsearch返回所有桶信息.
由于我有大量的桶(数十或数亿),这是令人望而却步的.不幸的是,我找不到告诉Es不要返回所有这些信息的方法.
这是一个玩具的例子.我有test-index一个文档类型的索引obj.obj有两个字段,key和values.
curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
"value": 100,
"key": "foo"
}'
curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
"value": 20,
"key": "foo"
}'
curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
"value": 50,
"key": "bar"
}'
curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
"value": 60,
"key": "bar"
}'
curl -XPOST 'http://10.10.0.7:9200/test-index/obj' -d '{
"value": 70,
"key": "bar"
}'
Run Code Online (Sandbox Code Playgroud)
我想得到具有相同s 的s key的最小值的平均值(在所有s上).平均最小值.valueobjkey
Elasticsearch允许我这样做:
curl -XPOST 'http://10.10.0.7:9200/test-index/obj/_search' -d '{
"size": 0,
"query": …Run Code Online (Sandbox Code Playgroud) Elasticsearch支持模糊搜索查询:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/fuzzy-match-query.html
并按期限进行分组聚合:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
它说"......桶是动态构建的 - 每个唯一值都有一个."
是否可以通过模糊术语组合这两个特征和桶?那么例如"America"和"Amrica"会属于同一个桶吗?(使用"term"桶它们属于2个独立的桶,使用"模糊"搜索,返回两个记录.
我正在尝试分组包括拼写错误在内的"关键字" - 也许有不同的方法可以解决这个问题?(暴力是对每个"关键字"运行"模糊"搜索并手动添加数字...)
我在ES数据库中有一堆公司数据.我想要计算每个文件中出现的文件的数量,但是我在聚合查询时遇到了一些问题.我希望排除诸如"公司"或"公司"之类的术语 到目前为止,我已经能够按照以下代码一次成功完成一个任期.
{
"aggs" : {
"companies" : {
"terms" : {
"field" : "Companies.name",
"exclude" : "corporation"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个回报
"aggregations": {
"assignee": {
"buckets": [
{
"key": "inc",
"doc_count": 375
},
{
"key": "company",
"doc_count": 252
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够做类似的事情
{
"aggs" : {
"companies" : {
"terms" : {
"field" : "Companies.name",
"exclude" : ["corporation", "inc.", "inc", "co", "company", "the", "industries", "incorporated", "international"],
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我找不到一种不会引发错误的方法
我查看了ES文档中聚合的"术语"部分,并且只能找到单个排除的示例.我想知道是否可以排除多个术语,如果是,那么这样做的正确语法是什么.
注意:我知道我可以将字段设置为"not_analyzed"并获取完整公司名称的分组,而不是拆分名称.但是,由于分析允许存储桶更容忍名称变化(即微软公司和微软公司),我对此犹豫不决.
我有两个索引 - 一个用于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)
根据@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)我正在玩ES以了解它是否可以涵盖我的大部分场景.我正处于考虑如何在SQL中达到某些非常简单的结果的问题.
这是一个例子
在弹性我有一个索引与这些文件
{ "Id": 1, "Fruit": "Banana", "BoughtInStore"="Jungle", "BoughtDate"=20160101, "BestBeforeDate": 20160102, "BiteBy":"John"}
{ "Id": 2, "Fruit": "Banana", "BoughtInStore"="Jungle", "BoughtDate"=20160102, "BestBeforeDate": 20160104, "BiteBy":"Mat"}
{ "Id": 3, "Fruit": "Banana", "BoughtInStore"="Jungle", "BoughtDate"=20160103, "BestBeforeDate": 20160105, "BiteBy":"Mark"}
{ "Id": 4, "Fruit": "Banana", "BoughtInStore"="Jungle", "BoughtDate"=20160104, "BestBeforeDate": 20160201, "BiteBy":"Simon"}
{ "Id": 5, "Fruit": "Orange", "BoughtInStore"="Jungle", "BoughtDate"=20160112, "BestBeforeDate": 20160112, "BiteBy":"John"}
{ "Id": 6, "Fruit": "Orange", "BoughtInStore"="Jungle", "BoughtDate"=20160114, "BestBeforeDate": 20160116, "BiteBy":"Mark"}
{ "Id": 7, "Fruit": "Orange", "BoughtInStore"="Jungle", "BoughtDate"=20160120, "BestBeforeDate": 20160121, "BiteBy":"Simon"}
{ "Id": 8, "Fruit": "Kiwi", "BoughtInStore"="Shop", "BoughtDate"=20160121, …Run Code Online (Sandbox Code Playgroud) 我正在研究一个 ElasticSearch (6.2) 项目,其中index有很多keyword字段,并且它们被标准化lowercase过滤器进行了执行不区分大小写的搜索。搜索工作良好并返回规范化字段的实际值(不是小写)。但是,聚合不返回字段的实际值(返回小写)。
以下示例取自 ElasticSearch 文档。
https://www.elastic.co/guide/en/elasticsearch/reference/master/normalizer.html
创建索引:
PUT 指数
{
“设置”:{
“分析”: {
“规范化”:{
“my_normalizer”:{
"类型": "自定义",
"char_filter": [],
“过滤器”:[“小写”,“asciifolding”]
}
}
}
},
“映射”:{
“_doc”:{
“特性”: {
“富”:{
“类型”:“关键字”,
"normalizer": "my_normalizer"
}
}
}
}
}
插入文档:
PUT 索引/_doc/1
{
"foo": "酒吧"
}
PUT 索引/_doc/2
{
"foo": "巴兹"
}
聚合搜索:
获取索引/_search
{
“大小”:0,
“aggs”:{
“foo_terms”:{
“条款”:{
“字段”:“foo”
}
}
}
}
结果:
{
“拿”:43,
“timed_out”:假,
“_shards”:{
“总”:1,
“成功”:1,
“跳过”:0,
“失败”:0
}, … 在我Elasticsearch服务器我有三个指标:Person,Archive和Document.
每个文档都有一个archive字段,它是_id的Archive它在不在.
每个归档有一个owner它是_id的Person那是存档的所有者.
通过上面的索引,我可以将文档聚合到存档和存档的存储桶中.
我怎样才能将文档包含在人员聚合中,这样如果我过滤特定的人,我会获得档案及其属于该人的文档,而不仅仅是档案?
这是我到目前为止过滤和汇总存档到业主的桶:
{
"post_filter": {
"terms": {
"owner": [
"my_owner_id"
]
}
},
"aggs": {
"_filter_archive": {
"filter": {
"terms": {
"owner": [
"my_owner_id"
]
}
},
"aggs": {
"archive": {
"terms": {
"field": "archive"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) search faceted-search elasticsearch elasticsearch-aggregation