javaelasticsearch
‘壹’ Elasticsearch:如何使用 java 对索引进行 ES|QL 的查询
在本文中,我们将探讨如何使用Java对Elasticsearch执行ES|QL查询。为了简化理解,所有代码已整理并置于GitHub(链接:GitHub - liu-xiao-guo/elasticsearch-java-esql),这是一个Maven项目。运行项目所需的命令为:
首先,确保安装了Elasticsearch及Kibana(参考链接进行安装)。特别注意,ES|QL仅在Elastic Stack 8.11及以上版本中可用,需下载对应版本进行安装。首次启动Elasticsearch时,记录输出中的密码用于后续配置。
准备数据集时,从先前文章下载数据集,并注意数据字段可能与文章中描述的不同。选取10个数据样本,并将其链接放置于此。克隆项目后,可见包含数据集的sample.csv文件。数据样本如下:
数据集字段重新命名,示例文档如下。
配置项目时,需编辑application.conf文件以适应具体设置,包括Elasticsearch访问地址、数据集路径及证书。为访问Elasticsearch,请申请API密钥。至此,配置基本完成。
在项目中,首先根据CSV格式字段创建Book.java类,对应数据集中的字段。阅读EsqlArticle.java文件,读取application.conf配置并创建Elasticsearch访问客户端。在客户端配置下,删除或创建books索引,定义索引映射(year为short类型,ratings为浮点数,其他为text字段)。使用Jackson CSV映射器配置文件读取,优化文档摄取,索引速度极快。
接下来,提取书籍信息。假设目标为['Julie Strain'],需注意在摄入文档时未针对author进行处理。当前ES|QL版本中,所有text字段作为keyword字段,全文搜索尚未完全实现。查询结果展示,通过ObjectsEsqlAdapter忽略ES|QL查询的JSON结果,返回熟悉的书籍列表。对于习惯SQL查询和JDBC接口的用户,客户端提供ResultSetEsqlAdapter,以相同方式使用,返回java.sql.ResultSet。示例中,找出Plympton PressIntl出版评分最高的书籍,结果可见于GitHub项目。
通过遵循本文所述步骤及代码示例,您将能够熟练使用Java对Elasticsearch执行ES|QL查询。
‘贰’ ElasticSearch JVM配置
Elasticsearch是基于Java构建的,需要至少 Java8 来运行它。只支持Oracle的Java和OpenJDK。所有Elasticsearch节点和客户机都应该使用相同的JVM版本。
我们推荐您安装Java1.8.0_131版本或者Java 8发行版系列的后续版本。我们推荐您使用 LTS JAVA 版本。如果使用了已知的糟糕的Java版本,Elasticsearch将拒绝启动。
Elasticsearch将使用的Java版本可以通过设置JAVA_HOME环境变量进行配置。
默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。 在转移到生产环境时,重要的是配置堆大小,以确保Elasticsearch有足够的可用堆。
Elasticsearch将通过Xms(最小堆大小)和Xmx(最大堆大小)设置分配在jvm.options文件中指定的整个堆。
这些设置的值取决于服务器上可用RAM的数量。好的经验法则是:
显示启用了从零开始的压缩oops而不是:
下面是如何通过jvm.options文件设置堆大小的例子:
还可以通过环境变量设置堆大小。这可以通过注释掉jvm.options文件中的Xms和Xmx设置来实现并通过ES_JAVA_OPTS设置这些值:
注意: 为Windows服务配置堆与上述配置不同。Windows服务最初填充的值可以如上配置,但在安装服务之后会有所不同。有关更多细节,请参阅 Windows服务文档 。
默认情况下,Elasticsearch配置JVM将堆从内存溢出异常转储到默认数据目录(/var/lib/elasticsearch是针对RPM和Debian包发行版的,Elasticsearch安装根目录下的data目录是针对tar和zip存档发行版的)如果此路径不适合接收堆转储,则应修改条目 -XX:HeapDumpPath=… 在jvm.options文件中。如果指定目录,JVM将根据运行实例的PID为堆转储生成一个文件名。如果指定的是固定文件名而不是目录,那么当JVM需要对内存溢出异常执行堆转储时,文件必须不存在,否则堆转储将失败。
默认情况下,Elasticsearch启用GC日志。这些都是在jvm.options中配置的和默认设置到与Elasticsearch日志相同的默认位置。默认配置每64 MB旋转日志一次,最多可以消耗2 GB的磁盘空间。
默认情况下,Elasticsearch配置JVM将致命错误日志写入默认日志目录(/var/log/elasticsearch是RPM和Debian包发行版的,Elasticsearch安装根目录下的logs目录是针对tar和zip存档发行版的)。这些日志是JVM遇到致命错误(例如,分割错误)时生成的。如果这个路径不适合接收日志,您应该在jvm.options文件中修改条目 -XX:ErrorFile=… 为一个替代路径。