请教各位一个 ES 关于 nested 检索问题

2023-05-18 14:10:34 +08:00
 GeekHao

需求:查询出满足以下两个条件的人员

es 版本:7.4.2

mapping 设计:

{
  "mappings": {
    "person": {
      "properties": {
        "patents": {
          "type": "nested",
          "properties": {
            "patent_type": {"type": "text"},
            "patent_name": {"type": "text"}
          }
        },
        "awards": {
          "type": "nested",
          "properties": {
            "award_name": {"type": "text"},
            "award_level": {"type": "keyword"}
          }
        },
        "papers": {
          "type": "nested",
          "properties": {
            "paper_name": {"type": "text"},
            "role": {"type": "keyword"},
            "publication_level": {"type": "keyword"}
          }
        }
      }
    }
  }
}

希望各位可以给出参考建议,方便的话可以直接贴出 DSL

812 次点击
所在节点    程序员
3 条回复
baozhibo
2023-05-18 15:05:10 +08:00
以下是满足您提供条件的 Elasticsearch 查询 DSL:

```json
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "patents",
"query": {
"term": {
"patents.patent_type": "实用新型专利"
}
}
}
},
{
"nested": {
"path": "papers",
"query": {
"bool": {
"must": [
{
"term": {
"papers.role": "第一作者"
}
},
{
"term": {
"papers.publication_level": "SCI"
}
}
]
}
}
}
}
],
"minimum_should_match": 2
}
}
}
```

您可以使用上述查询 DSL 在 Elasticsearch 中执行搜索,以获得满足条件的人员。请注意,该查询假设您的索引类型为 "person",并且在索引中的字段和嵌套对象的属性名称与提供的映射一致。如果您的实际情况不同,请相应地调整查询。
baozhibo
2023-05-18 15:05:49 +08:00
@baozhibo chatGPT 的回答。
GeekHao
2023-05-18 15:23:06 +08:00
@baozhibo minimum_should_match 是最少满足两个 bool 条件吧, 我用 gpt 尝试解决这个问题,但是它的回答似乎都不太正确

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940987

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX