我们将Elastic4s用于ElasticSearch 2.2.0。许多查询以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
请注意,我删除了
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
。 Elasticsearch REST客户端为匹配返回分数 3.075806 。 最佳答案
elastic4s rawQuery
会将您的rawQuery-JSON包装在另一个查询对象中。
就像您要查询
{ "query": { "query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
...
只需从JSON中删除包装的“查询”,响应就会显示不同的分数。
另外,您可以尝试使用
extraSource
而不是rawQuery
,如elastic4s docu中所述。尽管它对我根本不起作用:错误信息:
value extraSource不是com.sksamuel.elastic4s.SearchDefinition的成员