我们在ElasticSearch 2.2.0中使用了elastic4s.许多查询作为JSON存储在磁盘上,并通过elastic4s驱动程序用作rawQuery.结果中的分数在通过命令行提交的查询或elastic4s驱动程序之间不同.elastic4s驱动程序始终为所有结果返回得分1,而命令行执行产生两个不同的得分(针对不同的数据类型).
elastic4s的代码:
val searchResult = client.execute {
search in indexName types(product, company, orga, "User", "Workplace") rawQuery preparedQuery sourceInclude(preparedSourceField:_*) sort {sortDefintions:_*} start start limit limit
}.await
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了任何内容,但rawQuery preparedQuery没有更改分数1.通过命令行的完整查询很长:
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
"fields": [
"name",
"abbreviation",
"articleNumberManufacturer",
"productLine",
"productTitle^10",
"productSubtitle",
"productDescription",
"manufacturerRef.name",
"props"
]
}
}
],
"filter": [
{
"or": [
{
"bool": {
"must": [
{
"type": {
"value": "Product"
}
},
{
"term": …Run Code Online (Sandbox Code Playgroud) 数据库中的对象有一个“属性”数组,可以容纳不同的对象。其中一些显示数字或范围,看起来像:
{'value': 10}
Run Code Online (Sandbox Code Playgroud)
或者
{'minValue': 4, 'maxValue': 8}
Run Code Online (Sandbox Code Playgroud)
当查询特定数字(如 X)的集合时,我想找到值等于 X 或 minValue <= X <= maxValue 的所有文档。我第一次尝试查询看起来像
db.Pool0.find({$or: [{'properties.value': X}, {'properties.minValue': {$lte: X}, 'properties.maxValue': {$gte: X}}]}, {'_id': 1}).pretty()
Run Code Online (Sandbox Code Playgroud)
缺点是如果属性数组包含多个指定 minValue 和 maxValue 的对象,则 X 可以介于其中任何一个之间。例如
"properties" : [
{
"minValue" : 4,
"maxValue" : 6
},
{
"minValue" : 10,
"maxValue" : 20
}
]
Run Code Online (Sandbox Code Playgroud)
将匹配 X = 8。能否改进查询以便尊重属性中的对象结构?
我来自一个play 1.2.7应用程序,目前开始使用play framework 2.4.1和scala.首先,我使用激活器web ui来管理应用程序,在那里我无法让应用程序使用不同的http端口.
我更改了conf/application.conf中的http.port设置,但仍然尝试绑定到已经在使用的端口9000.我尝试的设置是:
http.port=7000
Run Code Online (Sandbox Code Playgroud)
关于如何更改通过激活器web ui运行的播放框架2.4.1应用程序的端口的任何建议?
请注意,我可以使用链接问题中的建议
./activator "run 7000"
Run Code Online (Sandbox Code Playgroud)
在应用程序本身将它绑定到端口7000.我的问题仍然是如何通过激活器web ui获得相同的行为?
我需要通过分组对象的集合masterID或id如果masterID不存在.在具有相同属性的一组对象中,masterID我需要找到具有最高pos属性($max: "$pos")的对象.但是,我很难获得pos最大化的完整对象,似乎通过聚合我只能得到pos属性,而不是整个对象.这是我使用的示例聚合,缺少$ifNullfor masterID:
> db.tst.aggregate([{ "$group": { "_id": "$masterID", "pos": { "$max": "$pos" } } }])
Run Code Online (Sandbox Code Playgroud)
示例对象将是:
> db.tst.find()
{ "_id" : ObjectId("547d6bd28e47d05a9a492e2e"), "masterID" : "master", "pos" : "453", "id" : "hallo" }
{ "_id" : ObjectId("547d6bda8e47d05a9a492e2f"), "masterID" : "master", "pos" : "147", "id" : "welt" }
{ "_id" : ObjectId("547d6be68e47d05a9a492e30"), "masterID" : "master2", "pos" : "1", "id" : "welt" } …Run Code Online (Sandbox Code Playgroud)