我有多个嵌套文档doc。嵌套查询工作正常,但它们仍然会返回所有嵌套对象(即整个文档),即使搜索查询只匹配少数嵌套对象。但是,它确实将文档作为一个整体进行过滤。
下面是一个例子:
PUT /demo
{
"mappings": {
"company": {
"properties": {
"employees": {
"type": "nested"
}
}
}
}
}
PUT
/demo/company/1
{
"id": 1,
"name": "Google",
"emp_count": 3,
"employees": [{
"id": 1,
"name": "John",
"address": {
"city": "Mountain View",
"state": "California",
"country": "United States"
}
}]
}
PUT
/demo/company/2
{
"id": 1,
"name": "Facebook",
"emp_count": 3,
"employees": [{
"id": 1,
"name": "Amber",
"address": {
"city": "Bangalore",
"state": "Karnataka",
"country": "India"
}
}, {
"id": 1,
"name": "Adrian",
"address": {
"city": "Palo Alto",
"state": "California",
"country": "United States"
}
}]
}
PUT
/demo/company/3
{
"id": 1,
"name": "Microsoft",
"emp_count": 3,
"employees": [{
"id": 1,
"name": "Aman",
"address": {
"city": "New York",
"state": "New York",
"country": "United States"
}
}]
}
当在地址中搜索India
时,理想情况下,我应该只获得带有一个嵌套对象的Facebook
,但我会获得所有嵌套对象。如何筛选返回的嵌套对象?
示例查询:
{
"query": {
"function_score":{
"query":{
"nested":{
"path":"employees",
"score_mode":"max",
"query": {
"multi_match":{
"query":"India",
"type":"cross_fields",
"fields":[
"employees.address.city",
"employees.address.country",
"employees.address.state"
]
}
}
}
}
}
}
}
该查询的输出是facebook
和所有员工,而我只想要amber
。
您可以使用inner_hits
获得所需的结果。
GET /demo/company/_search
{
"query" : {
"nested" : {
"path" : "employees",
"query" : {
"match" : {"employees.address.country" : "India"}
},
"inner_hits" : {}
}
}
}
产出将是:
"hits": {
"total": 1,
"max_score": 1.4054651,
"hits": [
{
"_index": "demo",
"_type": "company",
"_id": "2",
"_score": 1.4054651,
"_source": {
"id": 1,
"name": "Facebook",
"emp_count": 3,
"employees": [
{
"id": 1,
"name": "Amber",
"address": {
"city": "Bangalore",
"state": "Karnataka",
"country": "India"
}
},
{
"id": 1,
"name": "Adrian",
"address": {
"city": "Palo Alto",
"state": "California",
"country": "United States"
}
}
]
},
"inner_hits": {
"employees": {
"hits": {
"total": 1,
"max_score": 1.4054651,
"hits": [
{
"_index": "demo",
"_type": "company",
"_id": "2",
"_nested": {
"field": "employees",
"offset": 0
},
"_score": 1.4054651,
"_source": {
"id": 1,
"name": "Amber",
"address": {
"city": "Bangalore",
"state": "Karnataka",
"country": "India"
}
}
}
]
}
}
}
}
]
}
您可以看到,inner_hits
节只有符合条件的员工。但是在elasticsearch 1.5.0中引入了inner_hits
。因此版本应该大于elasticsearch 1.5.0。您可以在这里查阅更多信息。
尊敬的弹性搜索专家, 我在查询嵌套对象时遇到问题。允许使用以下简化映射: 并将一些文档放在索引中: 现在我想执行这样的查询: 因此,我想得到匹配的公司与数量匹配的文件。因此,上面的查询应该会告诉我: 以下查询: 应该给我所有公司分配到一个文件,其标题包含“GPU”与匹配的文件数量: 如果表现良好,是否有可能实现这一结果?我显然对匹配的文档不感兴趣,只对匹配文档和嵌套对象的数量感兴趣。 谢谢你的帮助
我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?
问题内容: 我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan = 1的闭包中获得价值 我正在得到这个错误响应; 我的映射如下所示。 有人知道我在做什么错吗? 问题答案: 您的查询不是有效的查询。您需要使用适当的复合查询将其他
问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套
问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:
问题内容: 我正在尝试使用query_string编写查询以检索嵌套对象的数据查询。 我想做的查询的一个例子是: 其中“ a”是嵌套对象,“ id”是“ a”的字段。 我知道我可以使用嵌套查询成功地执行此任务,编写如下查询: 但是,我想避免这种情况。我不想自己弄清楚用户正在搜索嵌套字段并修改查询。我尝试使用“ fields”参数,但它似乎不适用于嵌套对象。 是否可以使用“ query_string