我正在研究像应用程序一样的火种。为了排除用户之前刷过的配置文件,我使用“must_not”查询,如下所示:
must_not:[{“terms”:{“swipedusers”:[“userid1”,“userid1”,“userid1”...]}}}
我想知道使用这种方法的限制是什么?这是一种可扩展的方法,当swipedusers数组包含2000个用户ID时也可以使用吗?如果有更好的可扩展方法,我很高兴知道......
答案 0 :(得分:1)
有更好的方法!它叫做"术语查找",就像你可以在关系数据库上做的传统连接......
我可以尝试在这里解释一下,但是,您需要的所有信息都在官方弹性搜索页面上有详细记录:
最终的解决方案是拥有2个索引,一个用于注册用户,另一个用于跟踪每个用户的滑动。 然后,对于每次滑动,您应该更新包含当前用户滑动的文档...在这里,您需要向数组添加元素,这是ElasticSearch中的另一个问题(如果您使用的是AWS管理的ElasticSearch,则会出现大问题)使用脚本解决... 有关详情,请访问https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-updates.html#_using_scripts_to_make_partial_updates
对于您的情况,查询将产生如下内容:
PUT /swipes
{
"settings": {
"auto_expand_replicas": "0-all"
}
}
您应该考虑的另一件事是滑动索引的复制配置,因为每个节点都会执行"加入"对于该索引,强烈建议在每个节点中拥有该索引的完整副本。您可以使用" auto_expand_replicas"来创建索引。与" 0-all"值。
private void miSaveImage_Click(object sender, RoutedEventArgs e)
{
ImageBrush bi = (ImageBrush)canvas.Background;
Rect bounds = VisualTreeHelper.GetDescendantBounds(canvas);
double pw = (bi.ImageSource as BitmapSource).PixelWidth;
double ph = (bi.ImageSource as BitmapSource).PixelHeight;
double px = (bi.ImageSource as BitmapSource).DpiX;
double py = (bi.ImageSource as BitmapSource).DpiY;
//Get the actual width and height of the image, then the dpi and render an image of it
RenderTargetBitmap rtb = new RenderTargetBitmap((int)pw, (int)ph, px*96, py*96, System.Windows.Media.PixelFormats.Default);
rtb.Render(canvas);
//create the encoder and save the image data to it.
BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));
try
{
//eventually I need to make this a save dialog but that will come later.
System.IO.MemoryStream ms = new System.IO.MemoryStream();
pngEncoder.Save(ms);
ms.Close();
System.IO.File.WriteAllBytes("Sample.png", ms.ToArray());
}
catch (Exception err)
{
MessageBox.Show(err.ToString(), "Problem saving image", MessageBoxButton.OK, MessageBoxImage.Error);
}
}