elastic4s:rawQuery 得分保持在 1
elastic4s: score stays at 1 with rawQuery
我们在 ElasticSearch 2.2.0 中使用 elastic4s。许多查询在磁盘上存储为 JSON,并通过 elastic4s 驱动程序用作 rawQuery。结果中的分数在通过命令行或 elastic4s 驱动程序提交的查询之间有所不同。 elastic4s 驱动程序总是 returns 所有结果的得分都是 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
请注意,我删除了除 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": {
"publishState": "published"
}
}
],
"must_not": [
{
"term": {
"productType": "MASTER"
}
},
{
"term": {
"deleted": true
}
}
]
}
}
]
}
]
}
}
}
请注意,这几乎是 preparedQuery
,但要用搜索查询替换 $search
。弹性搜索 REST 客户端 returns 匹配得分 3.075806。
elastic4s rawQuery
会将您的 rawQuery-JSON 包装在另一个查询对象中。
这就像你要查询
{ "query": { "query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
...
只需移除您的包裹 "query" JSON,响应将显示不同的分数。
或者您可以尝试使用 extraSource
而不是 rawQuery
,如 elastic4s 文档中所述。虽然它对我根本不起作用:
错误信息:
值 extraSource 不是 com.sksamuel.elastic4s.SearchDefinition
的成员
我们在 ElasticSearch 2.2.0 中使用 elastic4s。许多查询在磁盘上存储为 JSON,并通过 elastic4s 驱动程序用作 rawQuery。结果中的分数在通过命令行或 elastic4s 驱动程序提交的查询之间有所不同。 elastic4s 驱动程序总是 returns 所有结果的得分都是 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
请注意,我删除了除 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": {
"publishState": "published"
}
}
],
"must_not": [
{
"term": {
"productType": "MASTER"
}
},
{
"term": {
"deleted": true
}
}
]
}
}
]
}
]
}
}
}
请注意,这几乎是 preparedQuery
,但要用搜索查询替换 $search
。弹性搜索 REST 客户端 returns 匹配得分 3.075806。
elastic4s rawQuery
会将您的 rawQuery-JSON 包装在另一个查询对象中。
这就像你要查询
{ "query": { "query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
...
只需移除您的包裹 "query" JSON,响应将显示不同的分数。
或者您可以尝试使用 extraSource
而不是 rawQuery
,如 elastic4s 文档中所述。虽然它对我根本不起作用:
错误信息: 值 extraSource 不是 com.sksamuel.elastic4s.SearchDefinition
的成员