示例文档
{
"id" : "video1",
"title" : "Gone with the wind",
"timedTextLines" : [
{
"startTime" : "00:00:02",
"endTime" : "00:00:05",
"textLine" : "Frankly my dear I don't give a damn."
},
{
"startTime" : "00:00:07",
"endTime" : "00:00:09",
"textLine" : " my amazing country."
},
{
"startTime" : "00:00:17",
"endTime" : "00:00:29",
"textLine" : " amazing country."
}
]
}
索引定义
{
"mappings": {
"video_type": {
"properties": {
"timedTextLines": {
"type": "nested"
}
}
}
}
}
内部无源过滤的响应良好。
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.91737854,
"hits": [
{
"_index": "video_index",
"_type": "video_type",
"_id": "1",
"_score": 0.91737854,
"_source": {
},
"inner_hits": {
"timedTextLines": {
"hits": {
"total": 1,
"max_score": 0.6296964,
"hits": [
{
"_nested": {
"field": "timedTextLines",
"offset": 0
},
"_score": 0.6296964,
"_source": {
"startTime": "00:00:02",
"endTime": "00:00:05",
"textLine": "Frankly my dear I don't give a damn."
},
"highlight": {
"timedTextLines.textLine": [
"Frankly my dear I don't give a <em>damn</em>."
]
}
}
]
}
}
}
}
]
}
}
响应包含嵌套属性的所有属性。即开始时间、结束时间和文本行。如何在响应中仅返回endtime和startTime?
查询失败
{
"query": {
"bool": {
"should": [
{
"match": {
"title": "gone"
}
},
{
"nested": {
"path": "timedTextLines",
"query": {
"match": {
"timedTextLines.textLine": "damn"
}
},
"inner_hits": {
"_source":["startTime","endTime"],
"highlight": {
"fields": {
"timedTextLines.textLine": {
}
}
}
}
}
}
]
}
},
"_source":"false"
}
错误HTTP/1.1 400错误请求内容类型:application/json;字符集=UTF-8内容长度:265
{"错误":{"root_cause":[{"type":"illegal_argument_exception","原因":"[inner_hits]_source不支持类型:START_ARRAY"}],"type":"illegal_argument_exception","原因":"[inner_hits]_source不支持类型:START_ARRAY"},"status": 400}
原因是因为从ES 5.0开始,inner_hits
中的不再支持短格式,而只支持完整的对象形式(
包含
和排除
)(请参阅此打开的问题)
您的查询可以这样重写,并且可以正常工作:
{
"query": {
"bool": {
"should": [
{
"match": {
"title": "gone"
}
},
{
"nested": {
"path": "timedTextLines",
"query": {
"match": {
"timedTextLines.textLine": "damn"
}
},
"inner_hits": {
"_source": {
"includes":[
"timedTextLines.startTime",
"timedTextLines.endTime"
]
},
"highlight": {
"fields": {
"timedTextLines.textLine": {
}
}
}
}
}
}
]
}
},
"_source":"false"
}
我的文档具有如下所示的嵌套字段: 嵌套字段的映射如下所示: 在切换到ElasticSearch2之前,我使用aggs查询了没有结果的文档。以下是查询的聚合部分: 现在我切换到了ElasticSerach2,它只计算所有文档。我已经尝试了不同的方法,比如计算所有文档和计算结果,这样我就可以减去结果,但是 总是0 如何正确筛选/计算嵌套字段?
基本问题如下:有没有一种方便的方法可以为嵌套查询的所有字段指定多字段匹配?对于普通查询有效。这在嵌套查询中不起作用,可能是因为嵌套对象没有_all? 下面是更详细的问题: 我有一个名为“Parent”的嵌套文档,如下所示: 这是我用于制作儿童嵌套对象的映射: 这是一个查询,我想使用所有子字段的匹配来选择几个术语查询,以及一个术语查询: 上述查询不起作用,因为我无法为嵌套对象选择多匹配查询中的所有字
我用的是Java 8号。我有一份汽车物品清单。我想按特定的顺序对它们进行排序。 每个汽车对象都属于一个模型。我喜欢按型号对汽车对象列表进行排序。排序后的列表应该是按照以下顺序,有车型的轿车SEDAN,然后是宝马,然后是独角兽。 所以当我打印排序后的列表时,它应该是这样的 如何使用自定义比较器在模型枚举上实现这种排序顺序。 如果你能帮忙,我很感激
我是Elasticsearch的新手,我试图创建一个过滤器来检索具有特定属性的文档。 属性在映射中定义为嵌套对象,如下所示: 我试图以以下形式执行一个复杂的查询: 这是elasticsearch 2.x。我做错了什么?
我有一个本地索引表,如下所示。 如何进行类似startDate的查询 据我所知,要对结果进行排序,我需要使用InvoiceDateLocalIndex。但如果使用,则会出现错误“筛选器表达式只能包含非主键属性:主键属性:InvoiceDate”
我有一个文档索引。我想过滤公共文档或由我的组成员(用户1和3)共享给组的文档。 隐私="公共"或(1,3)中的隐私="组"和user_id) 我可以分开做,但是如何将它们与OR结合起来? 文件: {“id”:1,“user_id”:1, “隐私”:“公共”,“标题”:“为一个人做饭”,} {“id”:3,“user_id”:1, “隐私”:“组”,“标题”:“三的公司”} {“id”:4,“use