我正在使用NEST强类型客户端在C#中使用弹性搜索.我有一个包含条目的索引:
[ElasticType(Name = "Entry", IdProperty = "Id")]
public class Entry
{
public string Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Award { get; set; }
public int Year { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果年份是参赛年份,例如2012年,奖励是参赛作品获奖的类型,可以为空.
然后,我想使用针对不同属性的提升来搜索这些条目.在下面的代码中,我希望结果在Title上的排名高于在Description上匹配的结果.
private IQueryResponse<Entry> GetMatchedEntries(string searchText)
{
return _elasticClient.Search<Entry>(
body =>
body.Query(q =>
q.QueryString(qs =>
qs.OnFieldsWithBoost(d =>
d.Add(entry => entry.Title, 5.0)
.Add(entry => entry.Description, 2.0))
.Query(searchText))));
}
Run Code Online (Sandbox Code Playgroud)
我现在被要求提高获奖者的成绩,并提升新的参赛作品(即年度).
我该怎么做呢?它是否需要作为索引服务的一部分或作为搜索的一部分来完成?
我签约的网络请求,并作为查询字符串的一部分,我需要包括
oauth_timestamp=123456789其中123456789是因为1970-01-01 00:00 UTC的标称时间.
我一直在使用POSIXTime表示它,它只是NominalDiffTime的类型别名.
当我想将POSIXTime/NominalDiffTime转换为Text时,我遇到了问题,这样我就可以将它添加到查询字符串项集合中.
问题源于NominalDiffTime的构造函数是私有的,因此我无法提取实际数字.
即使是hacky的使用方式show也会附加"s"生成123456789s.
有没有一种从NominalDiffTime中提取实际数字的简单方法?
如果调用的Stack Haskell项目MyProject包含以下模块:
src\
Foo1
Foo2
Bar\
Foo3
Run Code Online (Sandbox Code Playgroud)
我想在所有模块名称中添加项目前缀,以帮助我将其与其他软件包中的其他导入模块区分开来,例如 MyProject.Bar.Foo3
我知道我可以的内容移动src到一个文件夹MyProject,然后前缀所有的模块MyProject.,但有没有办法与阴谋的文件要做到这一点,例如project-prefix=MyProject,或者其他的解决方案,这将使我同样的效果,而无需进行重组项目文件?
以下代码不编译:
class Foo f where
getInt :: f -> Int
class Bar b where
getFooFromBar :: Foo f => b -> f
someFunction :: Bar b => b -> Int
someFunction bar = getInt $ getFooFromBar bar
Run Code Online (Sandbox Code Playgroud)
错误是 Could not deduce (Foo f) arising from a use of 'getInt' from the context (Bar b)
我知道我可以通过更改类来修复错误,Bar如下所示:
class Foo f => Bar f b where
getFooFromBar :: b -> f
Run Code Online (Sandbox Code Playgroud)
但我更愿意,如果我不必添加f到所有的实例签名Bar.
有没有办法通过仅将Foo f约束仅保留在getFooFromBar …
如果我使用以下内容Source:
sourceList [1,3,3,1,2,3]
Run Code Online (Sandbox Code Playgroud)
是否可以应用某些过滤器或组合器来仅允许向下游传递不同的值?
所以在我的例子中,只会[1,3,2]传递到下游?