![](/img/trans.png)
[英]Elasticsearch - How to boost score by the results of an aggregation?
[英]Elasticsearch 6.2.4: how to order aggregation results by _score?
我在按_score desc排序的查询部分中有所需的查询结果。 现在,我需要提取每个文档的3个字段。 我想实现像:
select distinct field1, field2, field3 from table A;
我只是试过:
1)使用折叠删除重复的值
GET index/_search
{
"collapse" : {
"field" : "filed1.keyword"
}
...
}
但是问题在于它只会保留filed1的不同值,而忽略field2和fiel3的值。 例如,我们有2条记录,例如:
[1, "a", "b"], [1, "c", "d"]
使用这种方法,我们只能获得一条记录,因为它们具有相同的field1值。 我想要这三个字段的不同组合值。 我们可以使用inner_hits来获取第二个字段的distict值,但是根据https://www.elastic.co/guide/zh-CN/elasticsearch/reference/current/search-request-collapse.html :第二级折叠不会不允许inner_hits。 这意味着它不能用于获取多个字段(> 2)之间的区别值。
2)使用聚合:
GET index/_search
{
"aggs": {
"field1": {
"terms": {
"field": "field1.keyword"
},
"aggs": {
"field2": {
"terms": {
"field": field2.keyword",
"missing": ""
},
"aggs": {
"field3": {
"terms": {
"field": "field3.keyword",
"missing": ""
}
}
}
}
}
}
},
...
}
它返回[field1,field2,field3]的离散值,但是文档的顺序已更改。 它们是由doc_count排序的,而不是_score排序的,我们无法在结果中获取_score的信息。
那么,如何在不更改当前顺序的情况下获得不同的组合值(因为我们已在“查询”部分中自定义了文档顺序)? 或者我们如何通过_score排序聚合结果?
谢谢!
以下是如何使用_score
aggregations
示例查询。
POST <your_index_name>/_search
{
"query": {
"match": {
"<yourfield>": "<yourquery>"
}
},
"aggs": {
"myaggs": {
"terms": {
"script": "_score"
}
}
}
}
因此,您上面的汇总查询将采用以下形式:
POST <your_index_name>/_search
{
"size":0,
"query":{
"match":{
"field1": "search non-search"
}
},
"aggs":{
"myaggs":{
"terms":{
"field":"field1.keyword",
"order": {
"_term": "asc"
}
},
"aggs":{
"myotheraggs":{
"terms":{
"field":"field2.keyword",
"order": {
"_term": "asc"
}
},
"aggs":{
"myotheraggs2":{
"terms":{
"field":"field3.keyword",
"order": {
"_term": "asc"
}
},
"aggs":{
"myscoreaggs":{
"terms":{
"script":"_score",
"order": {
"_term": "desc"
}
}
}
}
}
}
}
}
}
}
}
因此,基本上,以上查询将按field1 field2 field3 score
的顺序返回您,其中field1 field2 field3
将根据asc lexicographical
顺序进行排序,而_score则按desc
顺序进行排序
例如,下面是样本排序数据的样子
field1|field2|field3|score
--------------------------------
non-search|lucene|graphdb|1
search|lucene|elasticsearch|2
search|lucene|elasticsearch|1
search|lucene|solr|2
search|lucene|solr|1
POST someindex/_search
{
"size":0,
"aggs":{
"myagg":{
"terms":{
"script":{
"source":"doc['field1'].value + params.param + doc['field2'].value + params.param + doc['field3'].value",
"lang":"painless",
"params":{
"param":", "
}
},
"order":{
"_term":"asc"
}
}
}
}
}
让我知道是否有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.