我找到了一种使用elasticsearch查询获取数据的方法。但我目前的问题是在spring boot查询中翻译它。
我的查询如下:
{
"from": 0,
"size": 10,
"query": {
"bool": {
"should": [
{
"constant_score": {
"filter": {
"term": {
"my_field": "my_value"
}
},
"boost": 10
}
},
{
"constant_score": {
"filter": {
"term": {
"my_field": "my_value"
}
},
"boost": 8
}
}
],
"filter": [
{
"terms": {
"my_array_field": [
"first_value",
"second_value"
]
}
},
{
"geo_distance": {
"distance": "10km",
"location": {
"lat": 40,
"lon": 2
}
}
}
]
}
},
"script_fields": {
"distance": {
"script": "doc['location'].arcDistance(40, 2) / 1000"
}
},
"_source": true,
"sort": [
{
"_score": "desc"
}
]
}
索引中存储的所有文档都有一个字段位置
,其类型定义为地理点
我的问题是:
如何翻译脚本_字段
,使用spring boot返回距离。
我目前的代码是:
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withPageable(PageRequest.of(page, size))
.build();
elasticsearchOperations.search(nativeSearchQuery, MyIndexedDocument.class);
我试图从这里使用ScriptField,并在这里看到了一个示例,但目前还没有找到任何解决方案。
_source
字段。是否可以使用NativeSearchQuery
来精确它?您可以使用注释@脚本字段
作为一种解决办法
如果有人有更好的答案,我会在没有任何有效答案的情况下回答这个问题。
如果这是一个与某人相关的问题,我最终选择使用地理距离排序来处理距离返回。
查询是这样的:
{
"from": 0,
"size": 10,
"query": {
"bool": {
"should": [
{
"constant_score": {
"filter": {
"term": {
"my_field": "my_value"
}
},
"boost": 10
}
},
{
"constant_score": {
"filter": {
"term": {
"my_field": "my_value"
}
},
"boost": 8
}
}
],
"filter": [
{
"terms": {
"my_array_field": [
"first_value",
"second_value"
]
}
},
{
"geo_distance": {
"distance": "10km",
"location": {
"lat": 40,
"lon": 2
}
}
}
]
}
},
"sort" : [
{ "_score": "desc"},{
"_geo_distance": {
"location": {
"lat": 40,
"lon": 2
},
"order": "asc",
"unit": "km",
"mode": "min",
"distance_type": "arc",
"ignore_unmapped": true
}
}
]
}
所以我可以得到我的距离作为回报,但不是作为一个内容领域,而是作为SortValue中的一个值
使用spring数据elasticsearch:
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
ScoreSortBuilder scoreSortBuilder = new ScoreSortBuilder();
GeoDistanceSortBuilder geoDistanceSortBuilder = new GeoDistanceSortBuilder("location", Double.parseDouble(location.getLatitude()), Double.parseDouble(location.getLongitude()));
geoDistanceSortBuilder.unit(DistanceUnit.KILOMETERS);
geoDistanceSortBuilder.ignoreUnmapped(true);
geoDistanceSortBuilder.sortMode(SortMode.MIN);
geoDistanceSortBuilder.order(SortOrder.ASC);
NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withPageable(PageRequest.of(page, size))
.withSort(scoreSortBuilder)
.withSort(geoDistanceSortBuilder)
.build();
elasticsearchOperations.search(nativeSearchQuery, MyIndexedDocument.class);
问题内容: 使用elasticsearch,我试图将计算出的字段添加到地理搜索中。我只想在搜索文档中附加一个额外的计算字段,但是当我通过“ script_fields”添加计算字段时,仅返回该字段。 我尝试添加通配符字段部分,但它不会影响结果。 如何使此查询返回添加了额外计算字段的? 问题答案: 不建议检索字段,而应使用源过滤。 所以,代替这个 用这个:
问题内容: 简而言之,当不使用_geo_distance排序时,是否有一种方法可以返回地理距离? 更新:为澄清起见,我希望结果按随机顺序排列并包含距离。 问题答案: 是的,您可以使用脚本字段。 例如,假设您的文档具有一个名为的地理位置字段,则可以使用以下内容: (请注意,只是一个转义的单引号,所以真的是) 如果还希望返回该字段,则可以如下指定:
问题内容: 我实现了一个脚本字段,该字段返回的距离如下所示:Elasticsearch结果中的返回距离? Ruby: 但是返回的距离不正确。如果该点很近,则距离会更正确,但是随着距离的增加,它会变得越来越不正确。 似乎无法弄清楚我在做什么。 问题答案: distanceInKm()将距离计算为平面上的点,该速度很快但不太准确。尝试改用arcDistanceInKm()。
我正在使用ElasticSearch 7.3来查询一些文档, 我想在查询响应中只返回每个文档的特定字段, 我发现可以使用来实现这一点, 我可以从Kibana使用这个查询来实现这一点- 返回给我正确的数据- 但我无法使用ElasticSearch的节点客户端实现同样的功能- 有人能帮我找到正确的方法来实现我的用例吗? 引用- https://www.elastic.co/guide/en/elast
我有下面的代码使用C#.NET 4.5和NEST 2.0通过nuget。此查询总是返回我的类型'trackpoint',其中包含具有此距离搜索代码的文档总数。我有2790份文件,计数返回仅此而已。即使以1厘米为距离单位,它也会返回所有2790份文件。我的“跟踪点”类型有一个位置字段、geo_point类型、gehash true和geohash_precision9。 我只是尝试根据距离过滤结果,
问题内容: 我已经在带有Elasticsearch-Spark连接器的火花壳中进行了一些实验。调用火花: 在scala shell中: 它运作良好,结果包含myquery中指定的良好记录。唯一的事情是,即使我在查询中指定了这些字段的子集,我也获得了所有字段。例: 返回所有字段,不仅返回a和b(顺便说一句,我注意到大小参数都不考虑在内:result包含10条以上的记录)。也许添加字段是嵌套的很重要,