![](/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.