问题标签 [elasticsearch-nested]
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.
elasticsearch - 匹配 Elastic Search 中存储的值和查询
我有一个名为的字段位于嵌套字段“名称”内,该字段是弹性搜索中的“关键字”。
名称字段包含 2 个值。
- 贾格纳坦·拉贾戈帕兰
- 拉贾戈帕兰。
如果我查询“Rajagopalan”,我应该只得到项目#2。如果我查询完整的 Jagannathan Rajagopalan,我应该得到 #1。
我如何实现它?
elasticsearch - Search through all document fields (nested and root document) in one multi match query
Let's assume these basic documents as an example:
I need to find the first document with a search term like pants stripes blue 38
. All terms should be connected with AND as I'm not interested in pants with dots or other size and color combinations.
My mapping looks like this:
Please ignore the fact that I'm using german stop words and such. I kept the example files above in english so that everyone can understand it but didn't adjust the mapping as the original example is in german.
So ideally what I want my query to look like is this:
And the Search Profiler from Kibana show that the query will be executed like this:
Which looks to be exactly what I need in terms of AND and OR logic. Search through every attribute with every term and connect those results with AND. So every search term needs to be in one of the fields but it doesn't matter in which it was found.
But this query seems to only search inside the nested documents. In fact it seems like each query can only search through nested objects or the root document. Not both at the same time. If I remove the nested part the Search Profiler shows the difference:
Results in:
Both queries return zero results.
So my question is if there is a way to make the above query work and to be able to truly search across all defined fields (nested and root doc) within a multi match query on a term by term basis.
I would like to avoid doing any preprocessing to the search terms in order to split them up based on them being in a nested or root document as that has it's own set of challenges. But I do know that this is a solution to my problem.
Edit The original files have a lot more attributes. The root document might have up to 250 fields and each nested document might add another 20-30 fields to it. Because the search terms need to search through lot of the fields (possibly not all) any sort of concatenation of nested and root document attributes to make them "searchable" seems unpractical.
A flattened index might be a practical solution. By that I mean copying all root documents fields to the nested document and only indexing the nested docs. But in this question I would like to know if it also works with nested objects without modifying the original structure.
elasticsearch - 如何根据elasticsearch中的父文档字段对嵌套聚合字段进行排序?
我有不同位置的商店索引。对于每家商店,我都有一个嵌套的折扣券列表。
现在我有查询以获取半径为 ax km 的所有唯一优惠券的列表,按给定位置上最近适用优惠券的距离排序
数据库 :: Elasticsearch
索引映射 ::
样本文件::
旧查询以获取给定位置 x km 区域内的唯一折扣券名称 ::
更新回复::
现在上面的查询将返回按计数排序的前 200 张折扣优惠券默认值,但我想返回根据给定位置的距离排序的优惠券,即最近适用的优惠券应该排在第一位。
有没有办法根据父键对嵌套聚合进行排序,或者我可以使用不同的数据模型解决这个用例吗?
更新查询 ::
elasticsearch - 弹性搜索查询 - 在对象数组中
我创建了一个包含 100 多个文档的索引,这里是示例 2 文档
文件 1:
“OfficeId”:1,“Officename”:“Washers Ltd”,“客户”:[
文件 2:
“OfficeId”:2,“Officename”:“Coldwell Ltd”,“客户”:[
在 UI 中,我们可以按客户名称或客户电话进行搜索。当我通过电话1111111111进行搜索时,我应该得到 2 个文档(命中 0,命中 1)但在第一个文档/命中 0 中,我如何才能过滤仅显示 1 个对象?
elasticsearch - 搜索引擎正确有效的 Elasticsearch 结构
我正在为我的音频商店建立一个搜索引擎。
我只对音频文档使用 1 个索引,结构如下:
按发布日期的顺序通过文本搜索音频文档很简单。但是我想通过基于特定范围内的音频收听时间和购买历史的趋势来进行文本搜索和排序,例如:过去 3 个月或过去 30 天的文本搜索趋势音频,所以我调整结构如下:
这是我获取过去 3 个月的热门音频的查询,它奏效了:
我对我的方法有一些不确定性,例如:
- 每个音频的收听次数和购买历史记录都很大,如果我这样构建数据是否有效?我只是用样本数据进行测试,它似乎工作正常。
- 每次我将收听时间和购买历史的新记录推送到音频文档时,Elasticsearch 是否会重新索引整个文档?
我是 Elasticsearch 的新手,所以有人可以就这个案例给我一些建议,非常感谢!
elasticsearch - 在 ElasticSearch 中使用嵌套字段是否会扩展或有任何意外的陷阱?
我们正在寻找有关在 ElasticSearch 中使用嵌套字段类型时可能遇到的规模/性能方面的任何陷阱的指导。我们有一个用例,我们正在使用 100k+ 个不同的客户模式,其中一些可能有 1m+ 个文档与之关联,我们希望支持对这些数据集的广泛客户查询。
例如,我们可能有一个客户与我们存储合同,他们的合同有 CounterParty(字符串)、Amount(数字)、Expiration(日期)。我们希望支持诸如“交易对手订购的金额> 100000且ExpirationDate> 2020-01-01的合同”之类的查询。
我们希望这些查询保持交互性(即 < 1 秒,从 10k 到 100 的数百万个文档)。我们已经进行了一些内部测试,但我想发布此内容以帮助我们发现我们遗漏的任何风险。
我们计划使用以下数据模型来支持大量模式,而不会导致映射爆炸:
映射将是:
查询看起来像:
您可以提供的任何关于我们在这样的模型中需要注意的事情的指导......尤其是在大规模排序性能、对这些结果的分页、显着的功能限制方面将非常有帮助,我们将非常感激。
elasticsearch - 嵌套弹性搜索文档上的不同值
我在我的 ES 索引上使用以下映射。我试图为给定的模糊或完全匹配的嵌套文档找到不同的值
样本文件
用于模糊搜索的搜索查询以查找与 Dan 匹配的帐户名称的帐户 ID
用于模糊搜索的搜索查询以查找与 Dan 匹配的帐户名称的帐户 ID
有人可以帮助了解模糊和精确搜索如何在嵌套类型上工作
elasticsearch - Elasticsearch 7.6 - 父字段和嵌套字段(文本字段)和聚合嵌套文档(关键字字段)的模糊匹配搜索
我正在尝试在父级和嵌套对象级别对基于文本的字段进行模糊搜索来聚合嵌套字段。我能够聚合父级属性,但是对于基于文本字段类型的搜索的嵌套字段的聚合时间很困难。
假设我的输入是:
输入搜索文本 - “动作英雄”:
我想汇总以下字段:
预期的综合结果
folder_tags_aggr_results [聚合父字段 folder_name]
files_quality_aggr_results [聚合嵌套对象中的质量字段]
elasticsearch - 在子项中搜索弹性搜索中的嵌套文档时获取父项的结果
我有项目,在每个项目中我都有任务,在每个任务中我都有评论。所以它看起来像:
我使用嵌套文档将数据存储在弹性搜索的索引中。我的结构如下所示:
现在我有一个任务页面,在其中显示所有项目的所有任务,并且我想在其中添加搜索,如果用户搜索任何内容并且搜索的文本出现在任务名称或其评论中,那么我需要显示只有那些任务。
所以我希望如果从孩子那里搜索到某些东西,那么我会得到它的父母(只有那些已经搜索评论的任务或者如果它在任务名称中)。我想要的另一件事是我还有一页项目,我也需要显示所有项目并需要添加一个搜索框,如果用户搜索任何内容,我需要在项目、任务和评论中搜索,并且需要显示找到其任务或评论的项目。我曾尝试使用 inner_hits,以下是我的查询:
但在这里我有问题:
- 我没有得到我想要的结果,在 inner_hits 中,我得到了搜索评论,而在 doc 结果中,我得到了所有任务,所以我必须使用来自评论的 task_id 过滤任务(因为我想要任务)。有没有一个好的方法可以做到这一点,因为我认为这种方法不好继续。
- 对于 inner_hits,我们不能获得超过 150 条记录,因为这是它的最大限制。
请让我知道我该怎么做。谢谢
elasticsearch - 具有嵌套过滤器和嵌套聚合的 ElasticSearch 查询
您好我正在构建一个弹性搜索查询来在根文档和嵌套文档之间进行关键字搜索,并且我需要为嵌套和根文档提供过滤和聚合功能。这是我正在使用的查询。我遇到了麻烦:
- 无法为嵌套类型应用多个过滤器。(我可以为根文档应用多重过滤器)。
- 无法将嵌套类型的多重过滤器转换为 Java 代码。(不确定要为“查询”部分使用哪个类 - MatchQueryBuilder 还是 NestedQueryBuilder?
弹性搜索专家,请帮助我!谢谢!