如何编写包含两个搜索词的查询,这些搜索词与突出显示内部匹配的嵌套对象。
下面是示例用例:
我有一个映射:
"mappings": {
"properties": {
"grocery_name": {
"type": "text"
},
"items": {
"type": "nested",
"properties": {
"name": {
"type": "text"
},
"stock": {
"type": "integer"
},
"category": {
"type": "text"
}
}
}
}
}
数据如下所示
{
"grocery_name": "Elastic Eats",
"items": [
{
"name": "Red banana",
"stock": "12",
"category": "fruit"
},
{
"name": "Cavendish banana",
"stock": "10",
"category": "fruit"
},
{
"name": "peach",
"stock": "10",
"category": "fruit"
},
{
"name": "carrot",
"stock": "9",
"category": "vegetable"
},
{
"name": "broccoli",
"stock": "5",
"category": "vegetable"
}
]
}
在这里,如果我想要一个在嵌套文档中同时包含桃子和胡萝卜的文档,我可以使用多个嵌套查询进行搜索,如下所示
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "carrot"
}
}
}
}
},
{
"nested": {
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "peach"
}
}
}
}
}
]
}
}
}
上面的查询工作得很好,但是如果我添加内部命中,我不能为两个嵌套查询添加,如果我这样做,我会收到以下错误
[inner_hits] 已包含键 [项目] 的条目
我想突出显示每个匹配的嵌套对象,因为elasticsearch不支持_source突出显示,有什么方法可以突出显示每个嵌套对象吗?
您当然可以有多个inner_hits
,但它们需要适当地命名:
{
"query": {
"bool": {
"must": [
{
"nested": {
"inner_hits": {
"name": "carrot" <--
},
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "carrot"
}
}
}
}
},
{
"nested": {
"inner_hits": {
"name": "peach" <--
},
"path": "items",
"query": {
"match_phrase": {
"items.name": {
"query": "peach"
}
}
}
}
}
]
}
}
}
如果没有提供名称,系统将默认使用嵌套路径,即两个子查询中的< code>items。
我在这里遵循这个例子: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html 以下查询: 与预期的一条记录匹配。假设我只想返回用户为“约翰·史密斯”和“艾利斯·怀特”的文档。 我试过: 但这返回零结果。我如何获得同时包含“Alice White”和“John Smith”的文档(这应该只是在原始结果中
我有几个产品的变化,像下面的一个 我正在寻找一个具有以下所有参数的查询 获取某个类别中的所有产品 获取所有黑色的产品 获取尺寸l和M 我当前的查询: 它的工作很好,如果我只搜索1个大小。但是一旦我搜索了2个尺寸,它就不会给出任何记录。我的猜测是,它在每个嵌套变体中寻找所有3个参数,显然它找不到。如何修改要搜索的查询 null 我的第二个问题:
基本问题如下:有没有一种方便的方法可以为嵌套查询的所有字段指定多字段匹配?对于普通查询有效。这在嵌套查询中不起作用,可能是因为嵌套对象没有_all? 下面是更详细的问题: 我有一个名为“Parent”的嵌套文档,如下所示: 这是我用于制作儿童嵌套对象的映射: 这是一个查询,我想使用所有子字段的匹配来选择几个术语查询,以及一个术语查询: 上述查询不起作用,因为我无法为嵌套对象选择多匹配查询中的所有字
//错误
假设我有一些用户使用以下文档编制索引: ElasticSearch DSL是否允许我构造一个查询,在该查询中,我可以根据人们的电子邮件地址进行搜索,但前提是该地址处于活动状态?更抽象地说,根据嵌套对象的其他属性搜索文档。 满足此条件的搜索将返回此文档以搜索或,但在搜索时不会返回此文档。
我有一个弹性搜索索引集合,如下所示, 现在我需要通过将与其值匹配来搜索文档。(是一些字段,其值存储在中)例如。对于字段,如果它是,则应与上述文档匹配。 我尝试将其映射为嵌套对象,但我无法编写查询来搜索与其相应值匹配的2个或更多的键id。