我是Nest的新手,我很可能不像我想的那样创建我的查询.我的问题更像是教人钓鱼而不是给我一条鱼.但是,我将以当前问题为例.
我在该类型的ElasticSearch中有几个文档Series.我将在下面没有属性和公共修饰符,只包含与查询相关的信息:
class Series
{
string Id {get; set;}
DateTime StartDate {get; set;}
DateTime EndDate {get; set;}
HashSet<Role> ReleasableTo {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这些都很好,花花公子.我可以Get()一个Series对象没问题.我遇到的问题是试图找出Nest如何格式化我的查询.我的近期目标是要找到最近的Series是释放到Role.Visitor.我设置了这样的Nest查询:
ISearchResponse<Series> response = client
.Search<Series>(r =>
r.Filter(f =>
f.Term<Role>(t=>t.ReleasableTo.First(), Role.Visitor))
.SortDescending(ser => ser.EndDate).Size(1));
Run Code Online (Sandbox Code Playgroud)
在我看来,这应该是生成一个过滤系列的查询,因此它只考虑ReleasableTo我的那些,Role.Visitor按结束日期反向排序,并将结果限制为返回的结果.这正是我想要的.在我为系列制作的数千条记录中,大约90%符合此配置文件.不幸的是,查询返回0结果.没有错误,只是没有结果.我不知道的是,如果我错误地使用API,如果Nest生成的查询结构没有意义,或者我根本不了解ElasticSearch.当我删除该Filter条款时,我得到了一个结果,但我不保证每个人都可以看到它.
如何查看Nest生成并发送到ElasticSearch的JSON?
我遇到的问题是我正在处理的应用程序有内存泄漏.经验告诉我,垃圾收集语言遇到内存泄漏的第一个地方是处理订阅事件并且以后未能取消订阅它们.第二个与存储静态有关.我是C#的新手,并且对不透明的事件类型感到沮丧.
我们通过抽奖的运气获得了一些双重订阅错误,但应用程序确实将事件用于许多事情.虽然我们非常清楚取消订阅您订阅的所有内容的原则,但仍然存在内存泄漏.我想系统地确定订阅什么.
编辑:
感谢您指向该GetInvocationList()方法的指针.我正在尝试创建一个动态转储结果的调试工具.问题是我发现的解决方案在.Net 2中工作,但不再在.Net 3.5中.本质上,告诉您获取EventInfo的相应FieldInfo(分别为反射,GetField和GetEvents).但是,在.Net 3.5中没有相应的FieldInfo,并且EventInfo不会让我获得调用列表.
我只想转储事件列表及其InvocationList以进行调试.
为了清楚起见,我遵循MVVM模式,我想构建我的项目,以便我可以在UWP应用程序和标准WPF应用程序之间共享我的模型代码.我要分享的代码没有UI.我可不乐意寻找新的工具来替代我已经使用多年,照顾像记录某些任务的那些思想,连接到一个面向文档的数据库,等等.
我试图围绕我已经拥有的一些代码开始编写UWP包装器并直接引用模型项目.Visual Studio拒绝让这种情况发生,向我显示一条错误消息"无法添加对项目'ACK.Model'的引用".当我试图将模型放在通用库中并从WPF应用程序引用它时,同样的事情发生了.我不是想分享WPF代码.只是没有引用UI库的模型层.
这是一个可怕的命题,因为这意味着如果我想做任何实质性的事情,我必须选择100%跳到UWP或保持100%WPF.NewtonSoft.JSON可能有一个普遍的分布(ASP.NET MVC),但对于ElasticSearch.NET,以及其他需要的工具,使重要的应用程序吗?
我找到了"可移植类库"项目类型隐藏的位置.PCL允许我在WPF和Universal应用程序之间共享我的代码,因为这是其中一个选项.这解决了我的代码的Model部分的简单情况,但我(仍然)不能使用我想要的一些库.仍然有大量我需要的库没有PCL可用.
我们正在寻求从 Maven 迁移到 Gradle,并且已经解决了您期望替换父 POM 概念的大部分挑战。有一个关键点我们还没有弄清楚。我们需要指定我们在全局范围内使用的 Spring Boot 版本,但是我遇到了我尝试过的两种解决方案的无效构建文件问题:
plugins { id 'org.springframework.boot' version '2.1.17.RELEASE' }声明放在通用构建脚本中。 构建错误, “只有项目和设置构建脚本可以包含插件 {} 块。”springBootVersion参数并在插件声明中使用它。 构建错误,“在 plugins {} 块之前只允许 buildscript {} 和其他插件 {} 脚本块,不允许其他语句”如果我可以apply plugin: 'org.springframework.boot',那么所有这一切都会更容易,但 Gradle 找不到插件。除了一个微服务外,所有微服务都在单一版本的 Spring Boot 上,如果可能的话,我们希望能够进行全局升级。
附加信息
pluginManagement概念对我们也不起作用,因为它解决了 Spring Boot 插件,但现在找不到依赖管理插件。我的常用构建脚本包含在此处:
repositories {
mavenLocal()
/* Removed our internal repositories */
jcenter()
mavenCentral() …Run Code Online (Sandbox Code Playgroud) 我有一个比较两个字节数组是否相等的方法,主要的警告是它不会失败并在检测到不等式时提前退出.基本上,代码用于比较跨站请求伪造令牌,并尽可能避免使用时间来破解密钥的能力.我希望我能找到详细讨论攻击的论文的链接,但重要的是,如果两个字节数组相等,我仍然有一个统计上可测量的偏差,以便尽快返回 - 尽管它是一个命令更好的.所以不用多说,这里是代码:
public static bool SecureEquals(byte[] original, byte[] potential)
{
// They should be the same size, but we don't want to throw an
// exception if we are wrong.
bool isEqual = original.Length == potential.Length;
int maxLenth = Math.Max(original.Length, potential.Length);
for(int i=0; i < maxLength; i++)
{
byte originalByte = (i < original.Length) ? original[i] : (byte)0;
byte potentialByte = (i < potential.Length) ? potential[i] : (byte)0;
isEqual = isEqual && (originalByte == potentialByte);
}
return isEqual;
} …Run Code Online (Sandbox Code Playgroud) 我有一个 Spring Cloud Data Flow 实例,其中包含我需要的应用程序和流。我什至编写了在命令 shell 中运行的脚本来一次部署所有这些东西。问题是我现在需要执行手动步骤,而不仅仅是开箱即用。
对于 Windows 和 Linux,我知道如何通过 shell 运行脚本并在脚本运行时结束脚本。
问题是我似乎可以使用 Spring Data Flow Shell 做同样的事情。我想做这样的事情:
java -jar spring-cloud-dataflow-shell.jar --runScript my-awesome-script.shell
Run Code Online (Sandbox Code Playgroud)
但是,我看不到任何说明存在类似内容的文档。我能找到的每个选项都不会运行脚本并保持外壳打开。或者还有另一种我完全不知道的选择。我 15 年的 Java 经验被过去 6 年的 .Net 打断了,Spring 看起来与以前完全不同了。