此处将为大家介绍关于如何处理Elasticsearch索引延迟的详细内容,并且为您解答有关elasticsearch索引的相关问题,此外,我们还将为您介绍关于5-ElasticSearch索引备份、e
此处将为大家介绍关于如何处理Elasticsearch索引延迟的详细内容,并且为您解答有关elasticsearch 索引的相关问题,此外,我们还将为您介绍关于5-ElasticSearch索引备份、elasticsearch索引、ElasticSearch索引Unix时间戳、Elasticsearch索引上次更新时间的有用信息。
本文目录一览:- 如何处理Elasticsearch索引延迟(elasticsearch 索引)
- 5-ElasticSearch索引备份
- elasticsearch索引
- ElasticSearch索引Unix时间戳
- Elasticsearch索引上次更新时间
如何处理Elasticsearch索引延迟(elasticsearch 索引)
这是我的情况:
我有一个包含用户列表的页面。我通过Web界面创建一个新用户,并将其保存到服务器。服务器在elasticsearch中为文档建立索引并成功返回。然后,我被重定向到不包含新用户的列表页面,因为它可能需要1秒钟的时间才能使文档在Elasticsearch中可供搜索
elasticsearch中的近实时搜索。
elasticsearch指南说您可以手动刷新索引,但说在生产中不要这样做。
…不要在每次在生产环境中为文档编制索引时进行手动刷新;这会损害您的表现。相反,您的应用程序需要了解Elasticsearch的近实时性并为此留出余地。
我想知道其他人如何解决这个问题?我希望有一个事件或可以听的东西告诉我何时可以搜索该文档,但似乎没有类似的东西。仅等待1秒是合理的,但似乎是个坏主意,因为它可能花费的时间要少得多。
谢谢!
答案1
小编典典即使可以强制ES刷新自身,您也已经正确注意到它可能会损害性能。解决此问题以及人们经常做的事情(包括我自己)的解决方案是给人一种 实时 的
错觉 。最后,这仅是用户体验的挑战,而不是真正的技术限制。
重定向到用户列表时,您可以人为地将刚创建的新记录包括在用户列表中,就像该记录是ES本身返回的一样。没有什么可以阻止您这样做的。而且,当您决定刷新页面时,ES会正确返回新的用户记录,并且没人在乎该记录的来源,此时用户所关心的只是他想查看新记录,他刚刚创建,只是因为我们习惯于顺序思考。
实现此目的的另一种方法是,重新加载一个空的用户列表框架,然后通过Ajax或其他异步方法,检索用户列表并显示它。
还有另一种方法是在UI上提供视觉提示/线索,表明在后台发生了某些事情,并且预计很快就会有更新。
最后,一切归结为不是让用户惊讶,而是给他们足够的线索,以了解发生了什么,正在发生什么以及他们仍应该期望发生什么。
更新 :
出于完整性考虑,此答案早于ES5,后者引入了一种方法,以确保在搜索索引或返回错误代码后文档可见之前,索引调用不会返回。通过?refresh=wait_for
在索引数据时使用,可以确定ES响应时,新数据将被索引。
5-ElasticSearch索引备份
1,安装Node.js
# 解压
tar -zxvf node-v12.18.3-linux-x64.tar.xz -C /home/install
# 配置环境变量
vi /etc/profile
# 追加如下内容
export NODEJS_HOME=/home/install/node-v12.18.3-linux-x64
export NODEJS_PATH=$NODEJS_HOME/lib/node_modules
export PATH=$NODEJS_HOME/bin:$PATH
# 刷新环境变量
source /etc/profile
# 测试
npm -v
node -v
2,安装elasticdump
具体的参数细节可以参考elasticdump官网,其实也包含详细的使用细节。
- 在线安装
npm install elasticdump -g
- 使用离线缓存安装的方式
# 解压缓存包,是在编写当前文档的时候保存的,如果失效了,在本地再生成一份即可
tar -xvf npm-cache.tar
# 进入node下的lib目录执行安装命令
npm install --cache /root/.npm --optional --cache-min 99999999999 --shrinkwrap false elasticdump
# 建立文件软连接到系统命令,如果elasticdump不在这个目录下,可以使用一下命令查找find / -name ''elasticdump''
ln -s /home/install/node-v12.18.3-linux-x64/node-v10.13.0-linux-x64/lib/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump
# 验证
elasticdump --help
3,简单使用案例
# 备份索引
elasticdump --input=http://192.168.73.156:9200/item --output=/home/elasticsearch/bakDemo/item_mapping.json --type=mapping
# 备份数据
elasticdump --input=http://192.168.73.156:9200/item --output=/home/elasticsearch/bakDemo/item_data.json --type=data
# 还原索引
elasticdump --input=/home/elasticsearch/bakDemo/item_mapping.json --output=http://192.168.73.156:9200/item --type=mapping
# 还原数据
elasticdump --input=/home/elasticsearch/bakDemo/item_data.json --output=http://192.168.73.156:9200/item --type=data
4,全量备份与还原
# 创建导出的目录,需要保持为空
mkdir /home/es_backup
# 执行导出命令
# 注意"--ignoreChildError"参数:ignoreChildError allows multi-elasticdump to continue if a child throws an error.
multielasticdump \
--direction=dump \
--match=''^.*$'' \
--ignoreChildError \
--input=http://192.168.73.156:9200 \
--output=/home/es_backup
# 执行还原命令
# 注意:这里测试还原的版本是5.6.14,所以还是需要template的,但是本身在导出的文件中不包含template文件,所以这里使用ignoreType选项在导入的时候忽略掉
multielasticdump \
--direction=load \
--ignoreChildError \
--input=/home/es_backup \
--ignoreType=''template'' \
--output=http://192.168.73.156:9200
elasticsearch索引
elasticsearch索引
为了将数据添加到ES,我们需要索引,索引是一个存储关联数据的地方。实际上,索引只是一个用来指定一个或多个分片的“逻辑命名空间”,可以理解为MySQL中的一个数据库的概念。
ElasticSearch索引Unix时间戳
我必须索引包含“时间”字段的文档,该字段的值是一个整数,表示自纪元以来的秒数(又称为Unix时间戳)。
我一直在阅读ES文档,发现了这一点:
http://www.elasticsearch.org/guide/reference/mapping/date-
format.html
但是似乎如果我要提交unix时间戳并将其存储在“日期”字段中(整数字段对我没有用),我只有两个选择:
- 实施我自己的日期格式
- 在发送方转换为支持的格式
我还有其他选择吗?
谢谢!
答案1
小编典典如果您提供一个映射来告诉ES字段是一个日期,则可以使用纪元毫秒作为输入。如果要ES自动检测,则必须提供ISO8601或其他可发现的格式。
更新:我还应该注意,您可以影响ES在映射中将哪些字符串识别为日期。http://www.elastic.co/guide/zh-
CN/elasticsearch/reference/current/mapping-date-
format.html
Elasticsearch索引上次更新时间
有没有一种方法可以从ElasticSearch中检索有关特定索引的最新更新时间的信息?我的目标是能够知道什么时候是最后一次在索引中插入/更新/删除任何文档。如果无法做到这一点,是否可以在索引修改请求中添加一些内容,以便稍后提供此信息?
答案1
小编典典您可以从_timestamp获取修改时间
为了更轻松地返回时间戳,您可以设置Elasticsearch来存储它:
curl -XPUT "http://localhost:9200/myindex/mytype/_mapping" -d''{ "mytype": { "_timestamp": { "enabled": "true", "store": "yes" } }}''
如果插入文档然后对其进行查询,则会得到时间戳记:
curl -XGET ''http://localhost:9200/myindex/mytype/_search?pretty'' -d ''{> fields : ["_timestamp"],> "query": {> "query_string": { "query":"*"}> }> }''{ "took" : 7, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" : "myindex", "_type" : "mytype", "_id" : "1", "_score" : 1.0, "fields" : { "_timestamp" : 1417599223918 } } ] }}
更新现有文档:
curl -XPOST "http://localhost:9200/myindex/mytype/1/_update" -d''{ "doc" : { "field1": "data", "field2": "more data" }, "doc_as_upsert" : true}''
重新运行上一个查询将向我显示一个更新的时间戳:
"fields" : { "_timestamp" : 1417599620167 }
今天的关于如何处理Elasticsearch索引延迟和elasticsearch 索引的分享已经结束,谢谢您的关注,如果想了解更多关于5-ElasticSearch索引备份、elasticsearch索引、ElasticSearch索引Unix时间戳、Elasticsearch索引上次更新时间的相关知识,请在本站进行查询。
本文标签: