Elastic Spring Data OR Java High Level REST Client?

问题描述 投票:0回答:1

我是Elasticsearch和Spring的新手。我写了一个Javascript POC,可以将JSON字符串转换为Elasticsearch查询(并执行请求)。它需要一个这样的字符串。

{
    "period": "years",
    "format": "xml",
    "criteria": {
        "operator": "OR",
        "operands": [
            {
                "operator": "AND",
                "operands": [
                    {
                        "operator": "exists",
                        "field": "def"
                    },
                    {
                        "operator": "includes",
                        "field": "keywords",
                        "value": [
                            "abcd"
                        ]
                    }
                ]
            },
            {
                "operator": "AND",
                "operands": [
                    {
                        "operator": "from",
                        "field": "links",
                        "value": 1
                    },
                    {
                        "operator": "includes",
                        "field": "keywords",
                        "value": [
                            "abcd",
                            "efgh"
                        ]
                    }
                ]
            }
        ]
    }
}

(注意:这个查询可以有任何级别的嵌套)

......并将其转换为这个。

{
    "query": {
      "constant_score": {
        "filter": {
          "bool": {
            "should": [
              {
                "bool": {
                  "must": [
                    {
                      "bool": {
                        "must": [
                          {
                            "exists": {
                              "field": "def"
                            }
                          },
                          {
                            "range": {
                              "effectiveDate": {
                                "gte": 1543982400,
                                "lt": 1575518400
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "bool": {
                        "must": [
                          {
                            "terms": {
                              "keywords.name": [
                                "abcd",
                                "efgh"
                              ]
                            }
                          },
                          {
                            "range": {
                              "effectiveDate": {
                                "gte": 1543982400,
                                "lt": 1575518400
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "bool": {
                        "must": {
                          "terms": {
                            "links": [
                              11048,
                              34618,
                              34658
                            ]
                          }
                        }
                      }
                    },
                    {
                      "bool": {
                        "must": [
                          {
                            "terms": {
                              "keywords.name": [
                                "abcd",
                                "efgh"
                              ]
                            }
                          },
                          {
                            "range": {
                              "effectiveDate": {
                                "gte": 1543982400,
                                "lt": 1575518400
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    },
    "size": 0,
    "aggs": {
      "by_id": {
        "composite": {
          "sources": [
            {
              "agg_on_id": {
                "terms": {
                  "field": "id"
                }
              }
            }
          ],
          "size": 10000,
          "after": {
            "agg_on_id": -1
          }
        },
        "aggs": {
          "latest_snapshot": {
            "top_hits": {
              "sort": [
                {
                  "effectiveDate": "desc"
                }
              ],
              "_source": true,
              "size": 1
            }
          }
        }
      }
    }
  }

它首先创建一个查询(类似于上面的),用于第一次访问Elasticsearch,以提取建立这个查询所需的一些信息('链接')。每次访问Elasticsearch可能会返回数百万个结果,所以它使用 "search_after "机制进行分页。我需要将这个POC转换为Spring应用。

问题:我需要将这个POC转换为Spring应用。: 哪一个最适合这个案例--Spring Data Elasticsearch还是Elasticsearch Java High Level REST Client?Spring data elasticsearch在创建简单的查询方面似乎做得不错,但在这种情况下,它能帮助我吗?任何建议都将是非常感激的。

java elasticsearch spring-data-elasticsearch elasticsearch-java-api
1个回答
1
投票

Spring Data Elasticsearch使用Elasticsearch提供的高级客户端进行非反应式实现。

你也可以将Elasticsearch的查询构建器与Spring Data Elasticsearch一起使用,这给了你最大的灵活性。

Spring Data Elasticsearch将实体映射(POJO到JSON)、仓库功能和Spring Data的其他东西放在上面.因此,这不是一个问题,如果你应该做一个或另一个,而是如果你需要或想要使用Spring Data Elasticsearch提供的额外功能。

编辑。

当使用Spring Data Elasticsearch时,你要配置使用过的 RestHighLevelClient (见 文件),然后将其注入到您的其他Spring Bean中。因此,您甚至可以使用Spring Data混合访问ES ElasticsearchOperations 或储存库,并通过以下方式访问。RestHighLevelClient 直接使用。


0
投票

我建议你使用 官方Java高级休息客户端 Elastic公司正在积极努力,你也可以看一下所有的 构建者 它支持(几乎所有的查询都有查询生成器)。

另外,以前Elasticsearch没有官方的JAVA客户端,但现在他们有了,并且在积极改进和开发,我认为你应该继续使用他们,因为它也提供了很多开箱即用的选项,而且谁也不比它背后的公司更了解Elasticsearch :)

© www.soinside.com 2019 - 2024. All rights reserved.