私信  •  关注

Val

Val 最近创建的主题
Val 最近回复了
4 年前
回复了 Val 创建的主题 » ElasticSearch无法工作(此页面不工作)[重复]

在最新版本(ES8)中,默认情况下会启用安全性(即SSL/TLS)。

如果您是从浏览器访问,只需使用 https 而不是 http :

https://localhost:9200
    ^
    |
 add this

最好的方法是利用 distance sorting 并检索最近的地理位置:

GET my-index/_search
{
  "size": 1,                                <--- return top 1
  "sort" : [
    {
      "_geo_distance" : {
          "location-field" : [-70, 40],     <--- center location
          "order" : "asc",                  <--- sorted by closest distance
          "unit" : "km",
          "mode" : "min",
          "distance_type" : "arc",
          "ignore_unmapped": true
      }
    }
  ],
  "query" : {
    "match_all" : {}
  }
}
4 年前
回复了 Val 创建的主题 » Elasticsearch推荐的最大内容长度

正如那句名言所说:这取决于……:-)

解决这个问题的经验性方法是测试不同的大小,看看哪一个提供了最好的吞吐量,同时仍然允许集群在高峰时间为用户请求提供服务。

6 年前
回复了 Val 创建的主题 » ElasticSearch聚合存储桶始终只显示10个结果

你需要给你的 terms 聚合:

Map<String, BucketStats> hourAggregations = new HashMap<>();
SearchResponse getResponse = client.prepareSearch( ElasticSearchConstants.INDEX ).setTypes( ElasticSearchConstants.TABLE)
        .addAggregation( AggregationBuilders.terms( "name")
                .field( "empId" )
-->             .size(100)
                .subAggregation( AggregationBuilders.stats( "stats" )
        .setQuery( query )
        .setFrom( 0 )
        .setSize( ( offset + 1 ) * 10 )
        .execute().actionGet();

这个 setSize() 呼叫只影响 hits 部分,即结果中的文档集,而不是聚合。我看你应该打电话 setSize(0) ,因为您只需要聚合值而不需要文档。

client.search() 别无选择。

但是,在检索单个文档时,可以使用 client.getSource() 而不是 client.get() .

7 年前
回复了 Val 创建的主题 » 如何使用ElasticSearch进行contains/like查询?

您可以尝试将搜索字符串放在像这样的双引号中,这样可以工作:

{
  "query": {
    "query_string": {
      "fields": [
        "Name",
        "Number",
        "ShortDescription"
      ],
      "query": "*\"Toner Cyan\"*"
    }
  }
}

此外,您应该知道搜索前缀通配符可能会带来灾难性的性能影响,具体取决于您拥有的数据量。我仍然相信你应该基于这个原因对NGRAMS进行索引。

7 年前
回复了 Val 创建的主题 » 更新ElasticSearch索引是否需要更新Kibana索引模式?
  1. 是的,如果您在ES中更改了索引映射,那么您需要进入kibana并刷新相关的索引模式。

  2. 现在,你需要进入基巴纳( Management > Index patterns ,选择索引模式,然后按窗口右上角的“刷新”按钮以获取映射更改。

还要注意,如果你更新了一些 text 字段以便 keyword 子字段,您还需要调用 _update_by_query API 在索引上重新索引所有文档中已更改的字段

7 年前
回复了 Val 创建的主题 » elasticsearch.logqueries在kibana配置中无效

这个 elasticsearch.logQueries Kibana 6.3中引入了设置,如图所示。 pull request

技术上讲,当呼叫 _bulk 终结点,内容类型头应为 application/x-ndjson 而不是 application/json as stated in their docs

最后一行数据必须以换行符结尾。每个换行符前面都可以有一个回车符。向此端点发送请求时,Content-Type头应设置为application/x-ndjson。

它不是JSON数组的原因是,当协调节点接收到批量请求时,它只需查看有多少行(即新行字符)就可以将其拆分为多个块,并将每个块发送到不同的节点进行处理。如果内容是JSON,协调节点将不得不全部解析它,对于几个兆字节的批量查询,它将对性能产生负面影响。

NDJSON 是一种存储或流式处理结构化数据的方便格式,可以一次处理一条记录。

7 年前
回复了 Val 创建的主题 » 如何在筛选出特定值的ElasticSearch中应用后过滤器?

你可以使用 bucket_selector 管道聚合以实现所需功能:

{
  "aggs": {
    "variable_grp": {
      "terms": {
        "field": "variable",
        "size": 200,
        "order": {
          "stats.avg": "asc"
        }
      },
      "aggs": {
        "stats": {
          "extended_stats": {
            "field": "value_num"
          }
        },
        "avg_gt_0": {
          "bucket_selector": {
            "buckets_path": {
              "avgStats": "stats.avg"
            },
            "script": "params.avgStats > 0"
          }
        }
      }
    }
  }
}
7 年前
回复了 Val 创建的主题 » ElasticSearch:使用过滤器和常量“分数”优化查询?

关于1:

搬家 genre 与过滤器上下文匹配可能会加快一点速度(尽管这取决于许多其他因素),但您将失去排名,这对您来说可能重要,也可能不重要。最后,使用 must 当排名很重要或 filter 如果不是这样的话,你唯一的目标就是匹配一个文档或者不给出一些标准。

此外,使用类型关键字只会得到“精确匹配”的语义,这可能是您想要的…或者不,这取决于您创建查询的方式(用户输入或控制的选择列表)。

关于2:

must_not already in a filter context 所以它不会比你已经看到的更简单。筛选器上下文由两个部分组成 滤波器 + 绝对不能 .

最后一件事是,当有人问到性能优化时,我总是补充: Premature optimization is the root of all evil 所以,只有当你真正看到性能问题的时候,才这样做,这是前所未有的。

7 年前
回复了 Val 创建的主题 » 在ElasticSearch模板中创建geoip字段

您需要在索引模板中创建以下字段:

{
  "properties": {
     ...
     "geoip": {
       "type": "object",
       "properties": {
         "location": {
           "type": "geo_point"
         }
       }
     }
  }
}
7 年前
回复了 Val 创建的主题 » 不考虑模板和映射的ElasticSearch索引

你可能只需要 refresh your index pattern 在Kibana中,它从基础索引中获取最新的映射。

7 年前
回复了 Val 创建的主题 » ElasticSearch:如何根据属性中的项目数获取文档计数?

你可以这样做:

{
  "size": 0,
  "aggs": {
    "length": {
      "terms": {
        "script": {
          "source": "params._source.vendors.length",
          "lang": "painless"
        }
      }
    }
  }
}
7 年前
回复了 Val 创建的主题 » 如何将没有ID的批量插入发送到ElasticSearch

如果您想要自动创建ID,只需使用 index 而不是 create 以下内容:

change this
    |
    v
{"index": {"_index": "test", "_type": "_doc"} }
{"user": "kimchy", "post_date": "2002-11-15T14:12:12", "message": "trying out Elasticsearch"}
7 年前
回复了 Val 创建的主题 » ElasticSearch多字段搜索语法错误

如果你只是改变 should must 它不起作用,因为 category_id 不能同时具有两个值(除非它是数组,但不是数组)。

您需要使用以下查询:

$elasticQuery = [
"bool" => [
    'must' => [
            [
                    "multi_match" => [
                        "query"  => $text,
                        "type"   => "cross_fields",
                        "fields" => [
                            "name^4",
                            "description"
                        ]
                    ]
            ],
    ],
    'filter' => [
            [
                'terms' => [
                    'category_id' => [ 1, 3 ]
                ]
            ]
    ]
]
];
7 年前
回复了 Val 创建的主题 » ElasticSearch-6.4.2是否有摄取附件插件?

您只需运行以下命令,即可安装正确的版本:

bin/elasticsearch-plugin install ingest-attachment

否则,您也可以从这里下载: https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-6.4.2.zip

然后像这样安装离线文件:

bin/elasticsearch-plugin install file:///path/to/ingest-attachment-6.4.2.zip
7 年前
回复了 Val 创建的主题 » Logstash是否支持ElasticSearch的“通过查询更新”?

这个 elasticsearch 输出插件只能调用 _bulk 端点,即使用 Bulk API .

如果要调用按查询更新API,则需要使用 http 输出插件并在事件内部自己构造查询。如果你解释你想要达到的目标,我可以用更多的细节更新我的答案。

注意:有一个 issue 请求此功能,但两年后仍将打开。

更新

所以如果你的输入事件是 {"cname":"wang", "cage":11} 您希望通过查询所有文档来更新 "cname":"wang" 设置 "cage":11 ,您的查询需要如下所示:

POST your-index/_update_by_query
{
  "script": {
    "source": "ctx._source.cage = params.cage",
    "lang": "painless",
    "params": {
      "cage": 11
    }
  },
  "query": {
    "term": {
      "cname": "wang"
    }
  }
}

所以您的logstash配置应该如下所示(您的输入可能会有所不同,但我使用了 stdin 出于测试目的):

input {
  stdin {
    codec => "json"
  }
}
filter {
  mutate {
    add_field => {
      "[script][lang]" => "painless"
      "[script][source]" => "ctx._source.cage = params.cage"
      "[script][params][cage]" => "%{cage}"
      "[query][term][cname]" => "%{cname}"
    }
    remove_field => ["host", "@version", "@timestamp", "cname", "cage"]
  }
}
output {
  http {
    url => "http://localhost:9200/index/doc/_update_by_query"
    http_method => "post"
    format => "json"
  }
}