我对查询非常困难,不知道我想要的是否可能。
简而言之,我需要根据外部数据对结果进行排序,这些外部数据用于在id(1)范围内进行搜索:
{
"from":0,
"size":30,
"query":{
"function_score":{
"functions":[
{
"weight":2,
"filter":{
"bool":{
"must":[
{
"query":{
"match_all":{
}
}
}
]
}
}
}
],
"query":{
"filtered":{
"query":{
"bool":{
"must":[
{
"match":{
"validated":true
}
},
{
"id": [ //<--- search within given id range
"id1",
"id2",
....
"id3"
]
}
]
}
},
"filter":{
"or":{
"filters":[
{
"and":{
"filters":[
{
"term":{
"_type":"type1"
}
}
]
}
}
... //allot more
]
}
}
}
},
"score_mode":"sum",
"boost_mode":"replace"
}
},
"min_score":1.5
}
故事:想象一下,您有多个文档和1个用于收藏夹功能(但它只存储ID,创建日期和更新日期)。 用户在他的收藏夹列表中搜索,他应该按时间顺序获得结果。
(1)我在文档的范围内搜索(默认限制为1024),因为我不想更改索引(扩充数据),它将成为一个繁重的过程(分配字段)。 我想根据这些外部ID的创建日期进行排序。当用户访问各种页面时,该索引将被触发为异步(服务器端)。
基于此,是否可以按外部数据对文档进行排序?
答案 0 :(得分:0)
我设法找到了解决方案(至少它有效)。我添加了每个id与时间戳分数的权重,以获得最近的第一个如下:
{
"from":0,
"size":30,
"query":{
"function_score":{
"functions":[
{
{
"filter":{
"term":{
"id"=>"id1"
}
},
"weight"=> "timestamp_score" // timestamp divided by 10000000., ex: 14.065543
}
}
],
"query":{
"filtered":{
"query":{
"bool":{
"must":[
{
"match":{
"validated":true
}
},
{
"id": [ //<--- search within given id range
"id1",
"id2",
....
"id3"
]
}
]
}
},
"filter":{
"or":{
"filters":[
{
"and":{
"filters":[
{
"term":{
"_type":"type1"
}
}
]
}
}
... //allot more
]
}
}
}
},
"score_mode":"sum",
"boost_mode":"replace"
}
},
"min_score":1.5
}
即使使用 1024 id(我当前的最大限制),这也能正常工作,它会影响语句不是整体(最大 1024 过滤语句,最大 1024 得分提升声明)。
任何其他的想法都很好,对我来说似乎有些骇人听闻