我在所需的查询结果中按_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/en/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排序聚合结果?
谢谢!
答案 0 :(得分:0)
下面是示例查询,介绍如何将ValueError: operands could not be broadcast together with shapes (273,) (273,29) (273,)
用于aggregations
。
_score
因此,您上面的聚合查询将采用以下形式:
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
的顺序进行排序,而_score会以asc lexicographical
的顺序进行排序订购
例如以下是样本排序数据的样子
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
让我知道是否有帮助。