我们正在为elastic4s 2.2.0使用ElasticSearch。许多查询以JSON形式存储在磁盘上,并通过rawQuery驱动程序作为elastic4s使用。结果中的分数在通过命令行提交的查询和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请注意,除了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客户端返回匹配的分数为3.075806。
发布于 2016-08-26 12:20:57
elastic4s rawQuery将您的rawQuery封装在另一个查询对象中。
就像你会质疑
{ "query": { "query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
...只要从JSON中删除包装"query“,响应就会显示出不同的分数。
或者,您可以尝试使用extraSource而不是rawQuery,就像elastic4s docu中描述的那样。虽然这对我一点也不管用:
ErrorMessage: value extraSource不是com.sksamuel.elastic4s.SearchDefinition的成员
https://stackoverflow.com/questions/36864137
复制相似问题