问题标签 [elasticsearch-high-level-restclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
381 浏览

elasticsearch - 不同的高级 Rest 客户端弹性查询

如何使用High Level Rest Client按不同值查找文档。文档讨论Aggregation framework了查找 distinct documentsby field。但我找不到任何使用High Level Rest Client. 我怎样才能与众不同documentsfield

数据

预期输出(任何带有“Field1”的文档:“Value1”)

不同嵌套值的弹性搜索查询

弹性聚合

下面的代码给出了相同的结果:

0 投票
1 回答
2534 浏览

java - 休息高级客户端:请求超时不起作用

我们正在尝试在查询中使用请求超时,但它似乎对我们不起作用。

以下是我们在设置过程中所做的事情:

  • search.default_allow_partial_results : false (在服务器端和客户端)
  • 在我们点击的每个搜索查询中设置 10 毫秒的超时。(客户端)
  • 除此之外,我们还设置了全局超时,如下面的代码所示:

查询耗时超过 8 秒,但仍未超时。我们已禁用部分结果,以期望得到超时错误,但我们也没有得到任何错误。

此外,即使查询花费的时间超过指定的超时时间,isTimedOut 标志也会始终返回为 false。

这是我正在查询的请求示例:

这是我们用于滚动的代码:

即使在部分结果的情况下,我们也希望设置 isTimedOut 标志。但事实并非如此。

你能指导我们哪里错了或者我们缺少什么吗?

相关问题:尽管设置了超时,但 Java High Level Rest Client 没有释放连接

0 投票
1 回答
1514 浏览

elasticsearch - Elasticsearch 分页最佳方法

我们开发了一个文件存储解决方案,它使用弹性搜索来存储有关文件的元数据,使用其余级别的客户端 java API。

我们目前通过“from”和“size”实现分页。客户打电话给我们指定大小,也可以指定页码,我们使用页码来计算偏移量或“从”。

它们也可以通过任何可以从字符串到日期、整数等命名的字段进行排序,但我们默认为创建日期

例如,从和大小导致的问题是深度分页,例如(解决方案1)

我一直在研究 searchAfter 功能并实现了这一点,所以在响应中我们返回最后一个“排序”索引值,客户端可以在后续调用中使用它来避免上述问题。例子。(解决方案 2)

这在某些情况下可以正常工作,但也给我们带来了奇怪的结果,因为我在上面提到我们允许按任何字段排序,所以例如我们有 100 个文件存储,所有“扩展”字段设置为 txt,100 个设置为 pdf,所以用户可以一个大小设置为 10 的调用并希望按“扩展名”排序,我们将它们与最后一个“排序”索引“txt”一起返回,然后在随后的 searchAfter 字段调用中使用“txt”,但这并没有不给出任何结果。

所以看起来 searchAfter 只适用于日期等字段。

我在想我们可能可以在内部存储 lastSorted 值(索引),所以回到解决方案 1,但如果 from + size > 10,000 使用最后一个排序值,它对客户端用户隐藏。我看到的唯一问题是我们可以在哪里存储最后一个排序值,并且每个搜索的最后一个排序值需要是唯一的,我可能不希望一个巨大的数据库纯粹为此而填充所有这些排序值。

想法?

谢谢,

0 投票
1 回答
2265 浏览

java - 将映射与 Elastic Search 的高级 REST JAVA 客户端异步放置 - 已弃用错误

我正在按照这个 Elastic Search 文档为我的 Elastic Search 索引创建一个名为“联系人”的映射。

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-put-mapping.html

运行我的代码导致

创建映射失败:验证失败:1:缺少映射类型;

这是我的代码。

这很奇怪,因为我遵循文档的示例。我正在使用 Java 客户端的 7.6.0 版本。


更新。我降级到 Java 客户端的 7.5.2 版本,因为这是我的 Elastic Search 部署的版本。put 映射命令现在可以工作了。但是,我无法让异步调用正常工作。如果我取消注释该调用,Eclipse 会告诉我该函数已弃用,我应该使用新函数。但是,新方法看起来与不推荐使用的方法相同(相同的参数,相同的名称)。有什么不同?以及如何告诉 Eclipse 使用新版本?

已弃用。此方法使用仍然引用类型的旧请求对象,这是一个已弃用的功能。应该使用 putMappingAsync(PutMappingRequest, RequestOptions, ActionListener) 方法,它接受一个新的请求对象。

只有同步的。

// 这里是异步调用不起作用。// client.indices().putMappingAsync(request, RequestOptions.DEFAULT, listener);

0 投票
1 回答
82 浏览

java - 将地图复制到 Elastic Search 的更新文档请求中

我想将一组键值对从 HashMap 添加到 Elastic Search 的 Java 高级 REST 客户端 API 中的 UpdateRequest 函数的请求正文中。

我可以成功循环遍历 HashMap 并提取键和值。如何以干净有效的方式将这些添加到构建器中?这

更新:新日期(),动物:鳄鱼

code 是我想用来自 HashMap 的真实数据实现的占位符。

这是我在 Elastic Search 中使用的文档。我们使用的是 7.5.2 版本。

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-update.html

0 投票
1 回答
271 浏览

java - 为什么 filterQuery 在 Elastic Search 的 JAVA 高级 REST 客户端中不起作用?

我正在尝试创建一个在弹性搜索索引上运行模糊搜索的函数。如果我完全按照索引中的拼写指定术语,我只会得到匹配项。如果我故意拼错该术语中的一个字母,例如

“博克”

,我想模糊搜索仍应返回相同的匹配项,但它不返回任何匹配项。同样,如果我用prefixQuery 或termQuery 替换fuzzyMatch,搜索只会在给出准确拼写的情况下返回结果

“鲍勃”

为什么是这样?我该如何解决?哪里有解释这些方法的文档?

这是我的代码...

这是 Postman 中 Get /index/_search 的结果...

0 投票
1 回答
770 浏览

elasticsearch - 在 Elasticsearch 中使用关键字进行聚合

我的最终目标是使用 Elasticsearch 索引构建分面搜索页面。我正在关注本教程

为什么此聚合查询不适用于我的数据?我想我需要更改我的聚合子句,使其引用关键字而不是字段,但不知道语法。

这是我的数据。我的意思是对以下 Postman 命令的响应:

这是回应:

这是我的查询:

这是错误:

0 投票
1 回答
120 浏览

java - ElasticSearch Rest 高级客户端重新映射错误

我正在尝试创建一个类,该类将通过 Rest High Level Client 自动写入 ElasticSearch,其中包含操作(create、createBatch、remove、removeBatch、update、updateBatch),并且这些操作都有效,我的测试用例都成功了。为了增加一点灵活性,我想实现以下方法:(find, findAll, getFirsts(n), getLasts(n))。find(key) 和 findAll() 都可以正常工作,但 getFirsts(n) 和 getLasts(n) 根本不行。

这是上下文:在每个测试用例之前->确保索引“test”存在,如果不存在则创建它在每个测试用例之后->删除索引“test”对于getFirsts(n)和getLasts(n)我调用create在 ElasticSearch 中有几个项目,然后根据 uniqueKey 进行搜索。

这是我的测试对象的映射:

这是我的测试用例:

这是 getFirstByIds(n):

这是查找(filterContext):

如果我多次运行测试用例,就会出现问题。第一次,测试顺利通过,但每当我们进行第二次测试时,我都会遇到异常:

环顾一天多后,我意识到地图已从原始地图(开头指定的地图)更改,并自动创建如下:

如我所见,映射会自动更改并引发错误。谢谢你的帮助!

0 投票
0 回答
3051 浏览

java - 使用 Elastic Search 的 JAVA 高级 REST 客户端进行聚合查询

我有一个有效的 cURL 请求来使用聚合查询搜索弹性搜索索引根据需要,响应包括指定聚合字段的值列表以及与这些值中的每一个匹配的文档计数。例如,我按邮政编码汇总联系人,响应包括 50 个邮政编码以及每个邮政编码中的联系人数量。伟大的。

现在我还编写了一个执行相同聚合查询的 JAVA 函数。如何解析嵌套在聚合响应中的数据?特别是,我想提取每个桶的 key 和 docCount 变量。我在网上和 Elastic 文档中找不到这样的示例。

这是我到目前为止...

searchResponse 确实包含聚合列表。但是,byZipAggregation 为空。如何获取 home_zip 聚合数据作为对象?我正在使用此 Elastic 文档...

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_bucket_aggregations.html

这是 searchResponse 的值:

更多文档数据在这里。我将其删除以简化此示例。

我注意到可以将整个 Aggregations 对象传递给我们的客户端代码,该代码是用 Javascript 编写的,然后在 Javascript 代码中解析出所需的字段。但是,我们希望在 Java 服务器代码中完成所有这些解析,这样我们就不会将不必要的数据传递给客户端。此外,对于我们的服务器来说,有些响应似乎太大而无法传递给客户端。那么,如何在 Java 中解析出存储桶键和 docCounts?

0 投票
1 回答
2253 浏览

elasticsearch - 查询生成器未在 Elastic Search JAVA 高级重置客户端中找到匹配项

我编写了查询 Elastic Search 索引的 JAVA 代码(由 Elastic Cloud 提供服务——尽管我认为这与这个问题无关)。

如果没有查询词,该函数会按预期返回索引中的所有文档。

当我使用 Elastic 的 QueryBuilder 语法(这是 Elastic 的 Java 高级 REST 客户端的一部分)添加搜索查询时,找不到匹配项。

即使 query = "RICARDO" 并且我确实在此索引中有一个文档,其 firstname 字段中的值为 "ricardo",hits 也是空的。大小写无关紧要......将查询设置为“ricardo”也不会带回任何匹配项。

为什么是这样?

这是我实现高级 REST 客户端库的问题,因为查询在 POSTMAN 中按预期工作......

确实回来了……