Tag: elasticsearch

ElasticSearch重新启动花费很长时间

我有一个四节点的ElasticSearch集群。当我将大约100G的数据插入集群后,我重新启动集群。我发现恢复碎片需要花费大量的时间。我注意到: 所有的主分片都通过网关从本地节点恢复,恢复非常快。 所有副本分片从主分片中恢复,我发现副本分片似乎从主分片中的节点复制到集群中的另一个节点。 在完成第一次长时间重新启动后,然后closures群集并再次重新启动群集,只需花费几分钟的时间 我很困惑,为什么我的分片再次复制时,我重新启动我的集群,我的节点中的原始副本数据在哪里? 我已经阅读了一些相关的问题,例如: 在elasticsearch中重新启动节点后快速恢复 https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-synced-flush.html 但它不起作用,当我第一次重新启动群集时,是否可以在节点上停止碎片迁移?

ElasticSearch JS客户端search

我正在开始使用ElasticSearch,并且遇到麻烦(我不理解,因为它必须)如何search。 首先,我有这两个文件: { "took": 133 "timed_out": false "_shards": { "total": 5 "successful": 5 "failed": 0 } "hits": { "total": 2 "max_score": 1 "hits": [2] 0: { "_index": "app" "_type": "player" "_id": "AVcLCOgAi_gt2Fih02MK" "_score": 1 "_source": { "nickName": "sarasa" "birthDate": "1994-11-05T13:15:30.000Z" "state": "sarasa" "adminState": "sarasa" "id": "" "account": { "type": "yojuego" "id": "asasdfa" "password": "asd fasd" […]

弹性search:了解如何优化写入操作,使读取不受影响

我们有一个带有弹性search后端的NodeJS应用程序,其中90%的时间使用非常less,偶尔绝对会砰的一声。 例如,典型情况下,它可能会在一个小时内收到50-100个读取请求,并且有1-2个写入请求。 在高峰时间,它可能会收到50,000个读取请求和30,000个写入请求。 在这些高峰时期,我们遇到了这样的情况:写入请求太多,以至于重新build立索引等。 甚至有读取请求被抓取; 这使得网站无响应。 为了处理这种types的负载,我们显然需要以某种方式优化弹性search或重新构build应用程序,并试图找出如何最好地做到这一点。 我想更好地理解的是: 1)在写操作上发生了什么似乎会杀死所有的东西,以及为了优化或加速呢? 2)我可以从代码的angular度来看,我可以使用批量操作更快地插入更多的logging,但是我想知道弹性search索引这种方式在系统上实际上效率较低。 我应该看到显着更好的性能(特别是在事物的读取方面),如果我们摆脱了批量插入,或者至less使插入的尺寸更小? 任何能够帮助我理解这种改变如何影响事物的东西都是有帮助的。 3)是否有分割读/写操作的能力,即使写操作被备份,读操作仍然继续工作? 例如,我正在考虑使用消息队列而不是直接使用弹性search插入,但是,再次回到问题#2,我不确定如何优化读取操作以继续工作。 例如有没有办法插入到不同的读取集群,然后合并数据? 这会多less有效吗? 感谢您的帮助。

RangeError:在node_modules – > elasticsearch中超出最大调用堆栈大小

在尝试编写一个在Firebase函数上部署的函数时,我写了下面的代码: 'use strict'; const elasticsearch = require('elasticsearch'); const firebaseAdmin = require('firebase-admin'); const functions = require('firebase-functions'); const Promise = require('promise'); const config = { firebaseUrl: FIREBASE_URL, elasticSearchUrl: ELASTICSEARCH_URL }; // configure firebase const serviceAccount = require("./serviceAccountKey.json"); firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.cert(serviceAccount), databaseURL: config.firebaseUrl }); const database = firebaseAdmin.database(); const client = new elasticsearch.Client({ host: config.elasticSearchUrl }); exports.indexentry = […]

在elasticsearch中查询

我是elasticsearch的新手。 我有两个文件是JarFileData和ClassData。 我用jarFileId字段链接了这两个文档。 这是ClassData { "_id" : ObjectId("59881021e950041f0c6fa1fa"), "ClassName" : "Exception", "jarFileId" : "JAR-0001", "dependencies" : [ { "dependedntClass" : "java/lang/RuntimeException", "methodSignature" : "<init>" }, { { "dependedntClass" : "java/awt/EventQueue", "methodSignature" : "isDispatchThread" }, { "dependedntClass" : "Exception", "methodSignature" : "setStackTrace" } ] } 这是JarFileData { "_id" : ObjectId("59881021e950041f0c6fa1f7"), "jarFileName" : "Client.jar", "jarFileId" : "JAR-0001", […]

请求包含无法识别的参数:在进行弹性search时请求获取build议

我是新的弹性search节点js + express,我很挣扎在弹性search的build议。 下面的事情,我已经完成,然后提出build议的要求。 1)我创build了es索引(名称 – “电影”)和types(“电影”)和索引的映射。 索引是: return elasticClient.indices.create({ index:"movies", body : { "settings" : { "index" : { "number_of_shards" : 5, "number_of_replicas" : 2 } } } }); } 映射是: createMovieMapping:function(){ return elasticClient.indices.putMapping({ index:"movies", type:"movie", body:{ properties:{ movieName : {type:"string"}, suggest:{ type:"completion", analyzer:"simple", search_analyzer:"simple", payloads:true } } } }) } 2)从我的数据库推动一些数据到estypes“电影”索引“电影”。 在索引中添加数据的函数: addDataToMovieEsIndex:function(document){ […]

用javascript api使用弹性search插入到数组中

我想添加一些东西到数组“tags”:[“red”]在弹性search使用JavaScript api ,目前,我这样做,如下所示: client.update( "test":{ "index": "test", "type": "type1", "id": "1", "body": { "script": "ctx._source.tags += tag", "params": { "tag": "blue" } } }) 这将字段"tags" : ["red"]更改为"tags" : blue而不是["red","blue"] , 我正在通过Ubuntuterminal使用curl -XPUT or curl -XPOST方法获得预期的输出 我的节点模块弹性search版本是2.4.2弹性search服务器是1.3.2 请帮忙…

在多个expressjs路由中共享elasticsearch客户端

我试图通过创build单独的文件来将我的巨大的expressjs路由重新组织成更小的块。 但是,有几个需要连接到elasticsearch客户端来执行search: 路线/ index.js var router = require('express').Router(); var models = require("../models"); var es = require('elasticsearch'); var es_client = new elasticsearch.Client({ host: 'localhost:9200', log: 'trace' }); router.get('/search', function(req, res) { // Do search in elasticsearch // es_client.search({……}); }); module.exports = router; 路线/ user.js的 var router = require('express').Router(); var models = require("../models"); var es = require('elasticsearch'); […]

使用ElasticSearch javascript客户端创build索引,promise不会返回

从一个小时以来,这是一直让我疯狂的事情。 我正在开发一个涉及使用Javascript访问ElasticSearch的项目。 作为testing的一部分,我想创build一个索引。 这里是一个非常简单的代码片段,在我看来,应该这样做,并打印从ElasticSearch服务器返回的消息: var es = require('elasticsearch'); var es_client = new es.Client({host: "localhost:9200"}); var breaker = Math.floor((Math.random() * 100) + 1); var create_promise = es_client.indices.create({index: "test-index-" + breaker}); create_promise.then(function(x) { console.log(x); }, function(err) { console.log(err);}); 当我进入一个目录时,运行npm install elasticsearch ,然后用NodeJS运行这个代码,会发生什么,请求是否发生,但是由于某种原因,promise不会返回。 我希望这个代码运行到最后,并且一旦ES服务器的响应回来,就完成了。 相反,这个过程只是挂起。 任何想法为什么? 我知道一个索引可以通过添加一个文档来创build,但是这个奇怪的行为只是使我感到困惑,我无法弄清楚它的原因或意义。

Elasticsearch聚合部分string,而不是全部string

基本上,我在这里要做的是从层级存储的string中获得二级下来的类别。 问题在于层次的层次有所不同,一个产品类别可能有六个层次,另一个只有四个层次,否则我会实施预定义的层次。 我有一些类别如下的产品: [ { title: 'product one', categories: [ 'clothing/mens/shoes/boots/steel-toe' ] }, { title: 'product two', categories: [ 'clothing/womens/tops/sweaters/open-neck' ] }, { title: 'product three', categories: [ 'clothing/kids/shoes/sneakers/light-up' ] }, { title: 'product etc.', categories: [ 'clothing/baby/bibs/super-hero' ] }, … more products ] 我试图得到像这样的聚合桶: buckets: [ { key: 'clothing/mens', … }, { key: 'clothing/womens', […]