在ElasticSearch6中,我有如下嵌套对象的数据:
{
"brands" :
[
{
"brand_name" : "xyz",
"products" :
[
{
"title" : "test",
"mrp" : 100,
"sp" : 90,
"status" : 1
},
{
"title" : "test1",
"mrp" : 50,
"sp" : 45,
"status" : 1
}
]
},
{
"brand_name" : "aaa",
"products" :
[
{
"title" : "xyz",
"mrp" : 100,
"sp" : 90,
"status" : 1
},
{
"title" : "abc",
"mrp" : 50,
"sp" : 45,
"status" : 1
}
]
}
]
}
我想从字段brand_name或字段title进行搜索。我想在相同的inner_hits中返回所有结果。
例如:如果我将搜索字符串输入为“xyz”,它应该返回两个brands对象和相应的product对象。如果我将搜索字符串输入为“test”,它应该只返回第一个品牌数组,只有第一个产品对象。
我怎么才能做到这一点。有什么想法吗?
我尝试使用嵌套路径查询,如下所示:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "brands",
"query": {
"bool": {
"should": [
{
"term": {
"brands.brand_name": "xyz"
}
},
{
"term": {
"brands.brand_name.keyword": "aaa"
}
},
{
"nested": {
"path": "brands.products",
"query": {
"bool": {
"should": [
{
"match": {
"brands.products.title": "xyz"
}
}
]
}
},
"inner_hits": {}
}
}
]
}
},
"inner_hits": {}
}
}
]
}
}
}
但是这个查询返回多个inner_hits响应,每个品牌和每个产品都有多个数组对象。
我希望响应像所有的品牌名称,这是匹配的字符串应该在一个数组下列出,所有的产品应该在同一inner_hits下在另一个数组下列出。
由于您希望内部命中根据匹配发生的位置而不同,即brands.brand_name
或brands.products.title
,因此可以有两个查询,一个查询用于品牌名称,另一个查询用于产品名称,作为独立的嵌套查询。然后,这些查询应该位于bool
查询的show
子句中。每个嵌套查询应该有自己的inner_hits
,如下所示:
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "brands",
"inner_hits": {},
"query": {
"term": {
"brands.brand_name.keyword": "test"
}
}
}
},
{
"nested": {
"path": "brands.products",
"inner_hits": {},
"query": {
"term": {
"brands.products.title": "test"
}
}
}
}
]
}
},
"_source": false
}
我只需要在文档中的三个字段中搜索一个术语,并根据搜索术语的位置对结果进行排序。例如,找到3个文档:1个在字段2中有搜索词,2个在字段3中有搜索词,3个在字段1中有搜索词。 我想按顺序看:3、1、2。 我以为我可以用助推来做。现在我使用以下方法: 然而,它似乎是,如果我有一个文档与4个词等于搜索词在字段2和另一个文档与1个词在字段1,比后者将有一个较小的分数。 我看到的一个解决方案是为field1和
问题内容: 我对ES还是相当陌生,并正在将其用于我的新项目。首先,我为客户提供了一个简单的映射,其中包含名字和姓氏以及付款信息对象列表。如果我在SQL中执行此操作,那将类似于客户表和具有1:许多关系的付款信息表。 这是我要执行的操作的一个简单示例:https : //gist.github.com/anonymous/6109593 我希望根据payInfos嵌套数组中的任何匹配项找到任何客户,即
问题内容: 我正在使用最新版本的elasticsearch-php以及最新版本的MongoDB和ElasticSearch。 我需要对可以包含一个或多个值的多个字段进行搜索。例: country_code应为NL,BE或DE,并且类别应包含AA01,BB01,CC02或ZZ11 我以为我会按照以下方式解决它(PHP): 但是结果甚至还不能接近我期望返回的数据。 有时 $ countries 和/或
我需要在我的应用程序中添加搜索栏。搜索将按名和姓进行搜索。我不知道如何编写elastcsearch查询。名字和姓氏是两个分开的字段。我是个新手。 例:名:约翰,姓:约书亚 搜索栏字符串为上层结果:约翰·乔·约翰·乔·约翰·乔·乔·约翰·约书亚·约翰·约书亚·乔...
这个问题的标题不能完全证明我的要求是合理的。我有一个嵌套文档,格式为 文档映射为 我希望能够以 我现在尝试的查询是 这允许我查询AND子句的第一个条件。我应该在查询中的何处添加第二个AND条件(弹性搜索不允许在其查询中包含多个must子句),以允许我根据这两个条件进行查询。我查看了elasticsearch bool查询组合must和OR,但这不是我所需要的。
我有一个elasticsearch索引,其中包含具有以下字段的用户:.“名称”:“凯”“年龄”:“23”“位置”:“德里,印度”“标签”:[“搜索”,“nosql”]等。 我想在用户的所有字段中查询多个字符串(例如:[“nosql”、“德里”)。可以使用Java API吗? 这是我正在使用的代码示例。(但与问题无关)这只是为了了解我现在使用的对象。 感谢提前。:)