TeT*_*TeT 5 scala elasticsearch elastic4s
我们在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": {
"publishState": "published"
}
}
],
"must_not": [
{
"term": {
"productType": "MASTER"
}
},
{
"term": {
"deleted": true
}
}
]
}
}
]
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这几乎是preparedQuery用于替换$search搜索查询.弹性搜索REST客户端为匹配返回3.075806的分数.
小智 1
elastic4srawQuery会将您的 rawQuery-JSON 包装在另一个查询对象中。
就像你会查询
{ "query": { "query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
...
Run Code Online (Sandbox Code Playgroud)
只需从 JSON 中删除包装“查询”,响应就会显示不同的分数。
或者,您可以尝试使用extraSource而不是rawQuery,如elastic4s文档中所述。虽然它对我根本不起作用:
ErrorMessage:值 extraSource 不是 com.sksamuel.elastic4s.SearchDefinition 的成员
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |