vor*_*rou 4 c# elasticsearch nest
main-kittens我正在搜索类型文档的索引Kitty。现在,我想做一个实验。对于某些用户,我想experiment-kittens改为搜索。类型与 \xe2\x80\x94 相同Kitty,并且所有字段与主索引中的值相同,但是虽然Bio主索引中的字段始终为空,但在实验之一中它存储了巨大的字符串。
Bio现在的问题是,由于内存/磁盘限制,我无法存储所有小猫的数据。所以experiment-kittens只有最近的小猫(比如上个月)。
我希望大多数用户的搜索保持完整(即始终使用主索引)。对于选定的,我想合并结果。逻辑应该是:
\n\nsearch userquery + date_created < 1 month ago in experiment-kittens\nsearch userquery + date_created > 1 month ago in main-kittens\nRun Code Online (Sandbox Code Playgroud)\n\n结果应该按 排序create_date,但结果太多,无法在我的应用程序中进行排序。
有没有办法让弹性对两个索引执行两个不同的查询并合并结果?
\n\n(我也确信这个问题可能有更优化的解决方案,如果你有的话请告诉我)。
\n您可以使用单个 Elasticsearch 请求搜索多个索引,方法是用逗号分隔索引名称。然后您可以使用 来missing filter区分两个索引(一个有Bio字段,另一个没有)。然后您可以使用range filter根据date_created字段值进行过滤。最后你可以使用sortAPI根据date_created字段的值进行排序。
将所有这些放在一起,您需要的 Elasticsearch 查询如下:
POST main-kittens,experiment-kittens/Kitty/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"missing": {
"field": "Bio"
}
},
{
"range": {
"date_created": {
"to": "now-1M"
}
}
}
]
}
},
{
"bool": {
"must_not": [
{
"missing": {
"field": "Bio"
}
}
],
"must": [
{
"range": {
"date_created": {
"from": "now-1M"
}
}
}
]
}
}
]
}
}
}
},
"sort": [
{
"date_created": {
"order": "desc"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可以替换"match_all": {}为您可能拥有的任何自定义查询。