我正在建立一个elasticsearch(5.0.1)集群.
它有三个符合主节点的节点:
el-m01
el-m02
el-m03
群集无法组装,并且每个主节点NotMasterException在日志中都会收到以下异常:
[2016-11-21T15:24:13,274][INFO ][o.e.d.z.ZenDiscovery     ] [el-m01] failed to send join request to master [{el-m02}{bBhsu3fJSj-MyiWJGhQmog}{_IzdeUd4Sv6g-rhemGjEVQ}{192.168.110.118}{192.168.110.118:9300}{rack=r1}], reason [RemoteTransportException[[el-m02][192.168.110.118:9300][internal:discovery/zen/join]]; nested: NotMasterException[Node [{el-m02}{bBhsu3fJSj-MyiWJGhQmog}{_IzdeUd4Sv6g-rhemGjEVQ}{192.168.110.118}{192.168.110.118:9300}{rack=r1}] not master for join request]; ], tried [3] times
启用调试日志使我能够理解以下内容:
大师选举正在进行,并取得了成功.但是,虽然每个节点都选择了一个主节点,但没有节点认为他是主节点.即:
这里发生了什么?
搜索界面中的一个常见问题是您想要返回一组结果,但可能想要返回有关所有文档的信息。(例如,我想查看所有红色衬衫,但想知道还有哪些其他颜色可供选择)。
这有时被称为“分面结果”或“分面导航”。Elasticsearch 参考中的示例在解释原因/方式方面非常清楚,因此我将其用作此问题的基础。
摘要/问题:看起来我可以为此同时使用后过滤器或全局聚合。它们似乎都以不同的方式提供完全相同的功能。它们可能有我看不到的优点或缺点?如果是这样,我应该使用哪个?
我在下面包含了一个完整的示例,其中包含一些文档和基于参考指南中示例的两种类型方法的查询。
选项 1:后置过滤器
我们可以做的是在我们的原始查询中获得更多结果,因此我们可以“对”这些结果进行聚合,然后过滤我们的实际结果。
这个例子很清楚地解释了它:
但也许您还想告诉用户有多少 Gucci 衬衫有其他颜色可供选择。如果你只是在颜色字段上添加一个术语聚合,你只会得到红色,因为你的查询只返回 Gucci 的红色衬衫。
相反,您希望在聚合期间包括所有颜色的衬衫,然后仅将颜色过滤器应用于搜索结果。
请参阅下面的示例代码中的内容。
一个问题是我们不能使用缓存。这是在(尚未适用于 5.1)elasticsearch 指南中警告:
性能考虑 仅当您需要对搜索结果和聚合进行差异过滤时才使用 post_filter。有时人们会使用 post_filter 进行常规搜索。
不要这样做!post_filter 的性质意味着它在查询之后运行,因此过滤(例如缓存)的任何性能优势都将完全丧失。
post_filter 应该仅与聚合结合使用,并且仅在需要差分过滤时使用。
然而,有一个不同的选择:
选项 2:全局聚合
有一种方法可以进行不受搜索查询影响的聚合。所以不是得到很多,聚合,然后过滤,我们只是得到我们过滤的结果,但对所有东西进行聚合。看看参考
我们可以得到完全相同的结果。我没有阅读任何关于缓存的警告,但似乎最终我们需要做同样多的工作。所以这可能是唯一的遗漏。
由于我们需要子聚合(您不能在同一“级别”上拥有global和 a )filter,因此它稍微复杂一点。
我读到的关于使用此查询的唯一抱怨是,如果您需要对多个项目执行此操作,则可能必须重复自己。最后,我们可以生成大多数查询,因此重复自己对我的用例来说并不是什么大问题,而且我并不认为这是与“无法使用缓存”同等的问题。
题
似乎这两个功能至少重叠,或者可能提供完全相同的功能。这让我很困惑。除此之外,我想知道其中一个或另一个是否有我没有看到的优势,以及这里是否有任何最佳实践?
例子
映射和文件
PUT /shirts
{
    "mappings": {
        "item": {
            "properties": {
                "brand": { "type": "keyword"},
                "color": { "type": "keyword"},
                "model": …{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 0,
  "aggs": {
    "itineraryId": {
      "terms": {
        "field": "iid",
        "size": 2147483647,
        "order": [
          {
            "price>price>price.max": "desc"
          }
        ]
      },
      "aggs": {
        "duration": {
          "stats": {
            "field": "drn"
          }
        },
        "price": {
          "nested": {
            "path": "prl"
          },
          "aggs": {
            "price": {
              "filter": {
                "terms": {
                  "prl.cc.keyword": [
                    "USD"
                  ]
                }
              },
              "aggs": {
                "price": {
                  "stats": {
                    "field": "prl.spl.vl"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
在这里,我收到错误:
“术语聚合顺序路径 [price>price>price.max] …
我正在使用 Elasticsearch 5.1.1 并使用 ES 提供的默认映射创建了 500 多个索引。
现在我们决定使用动态模板。为了将此模板/映射应用于旧索引,我需要重新索引所有索引。
最好的方法是什么?我们可以为此使用 Kibana 吗?找不到足够的文档来执行此操作。
所以我有一个查询来获取记录,过滤条件是这样的
 GET  tenantforsneha55/permits/_search/ 
    {
      "from":0,
      "size":10,
      "sort":[
        {
          "permitNumber.keyword":{
            "order":"asc"
          }
        }
      ],
      "query":{
        "bool":{
          "must":[
            {
              "terms":{
                "workClassId":[
                  "1",
                  "2"
                ]
              }
            },
            {
              "terms":{
                "typeId":[
                  "1",
                  "2"
                ]
              }
            }
          ]
        }
      }
    }
这显示了这样的过滤器的结果获取记录,其中 ["1","2"] 中的 typeId 和 ["1","2"] 中的 classId
但我希望过滤条件像这样 typeId = 1 and classId = 1 OR typeId = 2 and classId = 2。
有没有办法拥有这个?我正在使用 NEST,这个查询是从它生成的,如果你能给我 C#、Elastic v 5.5 中的代码,那就太好了
我试图到达MockTransportClient这里是代码
 class CampaignTest extends ESIntegTestCase {
  var client: Client = null
   @Before def initClient(): Unit = { 
    val file = Files.createTempDirectory("tempESData")
    val settings = Settings.builder()
      .put("http.enabled", "false")
      .put("path.data", file.toString()).build()
    client = new MockTransportClient(settings)
  }
  @Test def myTest(): Unit = {
    println("client is"+client)
  }
  @After def closeClient(): Unit = {
    client.close() //close client after test
    client = null
  }
和它的抛出异常
[error] Test testcontrollers.campaign.CampaignTest failed: java.lang.RuntimeException: found jar hell in test classpath, took 0.0 sec
[error]     at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:91)
[error]     at …我正在尝试使用 docker-compose 安装 docker-elk 堆栈,弹性搜索和 kibana 工作正常,但我的 logstash 没有连接到弹性搜索并抛出如下所示的错误,我是第一次安装它,所以没有对它有很多了解。
logstash-5-6          | [2017-11-26T06:09:06,455][ERROR][logstash.outputs.elasticsearch] Failed to install template. {:message=>"Template file '' could not be found!", :class=>"ArgumentError", :backtrace=>["/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.2-java/lib/logstash/outputs/elasticsearch/template_manager.rb:37:in `read_template_file'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.2-java/lib/logstash/outputs/elasticsearch/template_manager.rb:23:in `get_template'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.2-java/lib/logstash/outputs/elasticsearch/template_manager.rb:7:in `install_template'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.2-java/lib/logstash/outputs/elasticsearch/common.rb:58:in `install_template'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.2-java/lib/logstash/outputs/elasticsearch/common.rb:25:in `register'", "/usr/share/logstash/logstash-core/lib/logstash/output_delegator_strategies/shared.rb:9:in `register'", "/usr/share/logstash/logstash-core/lib/logstash/output_delegator.rb:43:in `register'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:290:in `register_plugin'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:301:in `register_plugins'", "org/jruby/RubyArray.java:1613:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:301:in `register_plugins'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:310:in `start_workers'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:235:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:398:in `start_pipeline'"]}
logstash-5-6          | [2017-11-26T06:09:06,455][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["//elasticsearch-5-6:9201"]}
配置文件
input {
    tcp {
        port => 5001
    }
}
## Add your filters / logstash plugins configuration here …logstash centos7 docker-compose elastic-stack elasticsearch-5
我有这样的文件:
{
body: 'some text',
read_date: '2017-12-22T10:19:40.223000'
}
有没有办法按日期查询最近 10 天发布的文档数?例如:
2017-12-22, 150  
2017-12-21, 79  
2017-12-20, 111  
2017-12-19, 27  
2017-12-18, 100  
在 Elasticsearch 中出现以下错误。
RemoteTransportException[[CN8keD-][127.0.0.1:9300][indices:data/write/update]]; 嵌套:RemoteTransportException[[CN8keD-][127.0.0.1:9300] 索引:数据/写入/更新[s]]];嵌套:MapperParsingException IOException[当前标记(START_OBJECT)不是数字,不能使用数字值访问器。
如何解决此错误?
我的 ES 节点之一因java.lang.OutOfMemoryError: Java heap space错误而失败。这是日志中的完整堆栈跟踪:
    [2020-09-18T04:25:04,215][WARN ][o.e.a.b.TransportShardBulkAction] [search1] [[my_index_4][0]] failed to perform indices:data/write/bulk[s] on replica [my_index_4][0], node[cm_76wfGRFm9nbPR1mJxTQ], [R], s[STARTED], a[id=BUpviwHxQK2qC3GrELC2Hw]
org.elasticsearch.transport.NodeDisconnectedException: [search3][X.X.X.179:9300][indices:data/write/bulk[s][r]] disconnected
[2020-09-18T04:25:04,215][WARN ][o.e.c.a.s.ShardStateAction] [search1] [my_index_4][0] received shard failed for shard id [[my_index_4][0]], allocation id [BUpviwHxQK2qC3GrELC2Hw], primary term [2], message [failed to perform indices:data/write/bulk[s] on replica [my_index_4][0], node[cm_76wfGRFm9nbPR1mJxTQ], [R], s[STARTED], a[id=BUpviwHxQK2qC3GrELC2Hw]], failure [NodeDisconnectedException[[search3][X.X.X.179:9300][indices:data/write/bulk[s][r]] disconnected]]
org.elasticsearch.transport.NodeDisconnectedException: [search3][X.X.X.179:9300][indices:data/write/bulk[s][r]] disconnected
[2020-09-18T04:25:04,215][DEBUG][o.e.a.a.c.n.i.TransportNodesInfoAction] [search1] failed to execute on node [cm_76wfGRFm9nbPR1mJxTQ]
org.elasticsearch.transport.NodeDisconnectedException: [search3][X.X.X.179:9300][cluster:monitor/nodes/info[n]] disconnected
[2020-09-18T04:25:04,219][INFO ][o.e.c.r.a.AllocationService] [search1] Cluster health status changed from …