es可以不创建索引库直接添加文档吗

es可以不创建索引库直接添加文档吗,第1张

可以

在es 中, 可以在没有索引,没有类型的情况下直接插入文档,插入后会自动创建索引和类型,es是一个分布式的文档数据库,索引的文档都是以json序列化形式存贮的,而不是像关系型数据库那样是列数据行的形式存贮的。

在es 70之前,常把es和关系型数据库的名词做如下映射

import re

import fileinput

def this_line_is_useless(line):

useless_es = [

'BEGIN TRANSACTION',

'COMMIT',

'sqlite_sequence',

'CREATE UNIQUE INDEX',

]

for useless in useless_es:

if research(useless, line):

return True

def has_primary_key(line):

return bool(research(r'PRIMARY KEY', line))

searching_for_end = False

for line in fileinputinput():

if this_line_is_useless(line): continue

if rematch(r", ''\);", line):

line = resub(r"''\);""''\);", r'``);', line)

if rematch(r'^CREATE TABLE', line):

searching_for_end = True

在使用Elasticsearch搜索时,如果需要召回大量数据,可以考虑以下几种方法:

1 使用分页技术:分页技术可以有效地减少每次搜索的数据量,使得搜索过程变得更快。

2 使用索引:索引可以有效地加快搜索速度,减少搜索时间。

3 使用搜索聚合:搜索聚合可以有效地减少搜索时要搜索的数据量,使得搜索变得更快。

4 使用缓存:缓存可以有效地减少搜索时要搜索的数据量,使得搜索变得更快。

5 使用高亮技术:高亮技术可以有效地减少搜索时要搜索的数据量,使得搜索变得更快。

这取决于您想要在数据库和ES中存储的数据类型和大小,以及您使用的基础设施。一般来说,数据库的写入速度可能会更快,因为它提供了高性能事务处理和索引结构,而ES则更倾向于搜索和分析,所以它可能会慢一点。

1 ES和solr都是作为全文搜索引擎出现的。都是基于Lucene的搜索服务器。

2 ES不是可靠的存储系统,不是数据库,它有丢数据的风险。

3 ES不是实时系统,数据写入成功只是trans log成功(类似于MySQL的bin log),写入成功后立刻查询查不到是正常的。因为数据此刻可能还在内存里而不是进入存储引擎里。同理,删除一条数据后也不是马上消失。写入何时可查询?ES内部有一个后台线程,定时将内存中的一批数据写入到存储引擎,此后数据可见。默认后台线程一秒运行一次。该线程运行的越频繁,写入性能越低。运行的频率越低,写入的性能越高(不会无限高)。

4 目前已知的单ES集群可以存储PB级别的数据,不过这个就非常费劲了。TB级别数据没压力。

5 如果使用ES官方提供的jar包访问,需要JDK17及以上。

6 使用对应的版本访问ES server。如果ES server端的版本是17,那么请使用ES 17的client。如果ES server是21,请使用21的client。

7 ES索引存在Linux服务器的文件系统之上(背后是文件系统,不是类似于HDFS的分布式文件系统)

8 ES Java client是线程安全的,全局构建一个即可满足读写需求,不要每次都创建ES client。每次访问ES都构建新的es client即会抛出次异常。

9 非常不建议使用ES的动态识别和创建的机制,因为很多情况下这并非你所需要。推荐的做法是在写数据之前仔细的创建mapping。

10 强烈不建议在ES中使用深分页。可能会导致集群不可用。

11 ES是静态分片,一旦分片数在创建索引时确定那么后继不能修改。

12 ES里提供了type,很多人以为type是物理表,一个type的数据是独立存储的;但是在ES内部并不是这样,type在ES内部仅仅是一个字段。所以在很多数据能分为独立index的情况下,不要放到一个index里用type去分。只有嵌套类和父子类的情况下使用type才是合理的。

13 ES并不提供原生的中文分词的能力。有第三方的中文分词的插件,比如ik等。Ik是个toy分词器,有严肃的分词需求的话,请在使用ES之前使用独立的分词器分好词后向ES写入。

14 ES中的index,首先会进行分片,每一个分片数据一般都会有自己的副本数据,ES分配分片的策略会保证同一个分片数据和自己的副本不会分配到同一个节点上。当集群中的某一节点宕机后,ES的master在ping该节点时通过一定的策略会发现该节点不存活;会开启ES的恢复过程

15 ES没有update的能力。所有的update都是标记删除老文档,然后重新insert一条新文档。

es替换mysql,MySQL属于关系数据库,有些逻辑在es上不方便。MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。

以上就是关于es可以不创建索引库直接添加文档吗全部的内容,包括:es可以不创建索引库直接添加文档吗、ES数据库数据迁移问题、es召回大量数据慢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10188193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存