我是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在创建简单的查询方面似乎做得不错,但在这种情况下,它能帮助我吗?任何建议都将是非常感激的。
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
直接使用。
我建议你使用 官方Java高级休息客户端 Elastic公司正在积极努力,你也可以看一下所有的 构建者 它支持(几乎所有的查询都有查询生成器)。
另外,以前Elasticsearch没有官方的JAVA客户端,但现在他们有了,并且在积极改进和开发,我认为你应该继续使用他们,因为它也提供了很多开箱即用的选项,而且谁也不比它背后的公司更了解Elasticsearch :)