我为嵌套对象具有以下索引架构:
"workExperiences": {
"type": "nested",
"properties": {
"isCurrentWorkplace": {
"type": "boolean"
},
"title": {
"properties": {
"id": {
"type": "text"
},
"name": {
"type": "text"
}
}
}
}
}
数据如下:
{
"hits": [{
"_source": {
"workExperiences": [{
"isCurrentWorkPlace": true,
"title": {
"name": "Some name",
"id": 259
}
},
{
"isCurrentWorkPlace": false,
"title": {
"name": "Some other name",
"id": 256
}
},
{
"isCurrentWorkPlace": false,
"title": {
"name": "another name",
"id": 257
}
}
]
}
},
{
"_source": {
"workExperiences": [{
"isCurrentWorkPlace": true,
"title": {
"name": "another workplace",
"id": 260
}
},
{
"isCurrentWorkPlace": false,
"title": {
"name": "Some other name",
"id": 256
}
},
{
"isCurrentWorkPlace": false,
"title": {
"name": "another name",
"id": 257
}
}
]
}
}
]
}
现在,如果我做一些简单的查询,例如找到“ isCurrentWorkplace”为true且title.id为259的工作场所,则它可以正常工作:
{
"from": 0,
"size": 30,
"_source": [
"workExperiences.*"
],
"query": {
"bool": {
"filter": {
"bool": {
"must": [{
"nested": {
"path": "workExperiences",
"query": {
"bool": {
"must": [{
"term": {
"workExperiences.title.id": 259
}
},
{
"term": {
"workExperiences.isCurrentWorkPlace": true
}
}
]
}
}
}
}]
}
}
}
}
}
现在的问题是,我需要组合这些必须子句。例如,我需要找到一条记录,其“ isCurrentWorkplace”为true,“ title.id”为259
AND “ isCurrentWorkplace”为false,“ title.id”为256。
为此,我创建了以下查询:
{
"from": 0,
"size": 30,
"_source": [
"workExperiences.*"
],
"query": {
"bool": {
"filter": {
"bool": {
"must": [{
"nested": {
"path": "workExperiences",
"query": {
"bool": {
"must": [{
"bool": {
"must": [{
"terms": {
"workExperiences.title.id": [259]
}
},
{
"term": {
"workExperiences.isCurrentWorkPlace": true
}
}
]
}
},
{
"bool": {
"must": [{
"term": {
"workExperiences.title.id": 256
}
},
{
"term": {
"workExperiences.isCurrentWorkPlace": false
}
}
]
}
}
]
}
}
}
}]
}
}
}
}
}
但是,这不起作用。有人可以帮我弄清楚我在做什么错吗?
谢谢!
根据您要实现的目标,是:记录("workExperiences.isCurrentWorkplace": true
和"workExperiences.title.id": 259
) 或
("workExperiences.isCurrentWorkplace": false
和"workExperiences.title.id": 256
)的位置。因此,您需要should
条款而不是must
条款:
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "workExperiences",
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"workExperiences.isCurrentWorkplace": true
}
},
{
"term": {
"workExperiences.title.id": 259
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"workExperiences.isCurrentWorkplace": false
}
},
{
"term": {
"workExperiences.title.id": 256
}
}
]
}
}
]
}
}
}
}
]
}
}
}
如果同一文档包含两个以上的对象(其中一个对象workExperiences
具有("workExperiences.isCurrentWorkplace": true and "workExperiences.title.id": 259
) 和
一个对象具有())应该显示一个文档"workExperiences.isCurrentWorkplace": false and "workExperiences.title.id": 256
,则查询将为:
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "workExperiences",
"query": {
"bool": {
"must": [
{
"term": {
"workExperiences.isCurrentWorkplace": true
}
},
{
"term": {
"workExperiences.title.id": 259
}
}
]
}
}
}
},
{
"nested": {
"path": "workExperiences",
"query": {
"bool": {
"must": [
{
"term": {
"workExperiences.isCurrentWorkplace": false
}
},
{
"term": {
"workExperiences.title.id": 256
}
}
]
}
}
}
}
]
}
}
}
我想计算一天内每个产品的每个IP访问计数。 一个索引中有三个参数(nginx访问日志): 时间戳 客户IP product\u id 我知道date\u直方图可以参考https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.
问题内容: 我的Elasticsearch DB中有一个像这样的文档: 我希望能够使用此条件过滤我的文档:Documents标签数组必须具有标签1,标签3和标签2,但不能具有标签A。 我尝试使用布尔过滤器,但无法使其正常工作! 问题答案: 这是一种似乎可以完成您想要的方法:http : //sense.qbox.io/gist/4dd806936f12a9668d61ce63f39cb2c2845
我有一个elasticsearch索引用于存储关于人的信息。为了找到特定的人,我有一些查询,每个查询都单独工作,但是当我使用Bool查询将它们组合起来时,我会得到一个错误。 其中一个查询是对名称的模糊搜索 另一个查询用于搜索在特定日期范围内出生的人 现在我想组合这两个查询。我的bool查询: 虽然当我单独使用它们时,这两个查询都工作得很好,但当把它们组合起来时,我会得到一个错误。我的索引中有名字是
应查找下列文件: 我尝试了以下方法: 它应该(但不是)这样工作: bool通过或和部分组合 第一个按查询选择 筛选器使用bool组合by或must_not` 但其行为类似于与via AND子句组合。例如。当我删除“must”或“must_not”时,查询工作。 如何通过OR子句更改查询以将“must”与“must_not”组合? Elasticsearch版本为
问题内容: 我想创建以下查询的等效项- 我使用必须和应该尝试了布尔查询的不同组合,但似乎没有任何效果。能做到吗? 问题答案: 这样的事情怎么样:
我有3个级别的父/子结构。假设: 公司- 由于这里经常更新可用性(以及员工),所以我选择对嵌套使用父/子结构。搜索功能工作正常(所有文档都在正确的碎片中)。 现在我想对这些结果进行排序。按公司(第1级)的元数据对它们进行排序很容易。但我也需要按第3级(可用性)进行排序。 我想要按以下顺序排列的公司列表: 与给定ASC位置的距离 评级DESC 最快可用性ASC 例如: A公司距离我们5英里,评分为4