加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – elastic4s:使用rawQuery得分保持在1

发布时间:2020-12-16 18:31:35 所属栏目:安全 来源:网络整理
导读:我们在ElasticSearch 2.2.0中使用了elastic4s.许多查询作为 JSON存储在磁盘上,并通过elastic4s驱动程序用作rawQuery.结果中的分数在通过命令行提交的查询或elastic4s驱动程序之间不同. elastic4s驱动程序始终为所有结果返回得分1,而命令行执行产生两个不同的
我们在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

请注意,除了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
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
}

请注意,这几乎是prepareQuery,但用搜索查询替换$search.弹性搜索REST客户端为匹配返回3.075806的分数.

解决方法

elastic4s rawQuery将rawQuery-JSON包装在另一个查询对象中.

就像你要查询一样

{ "query": { "query": {     
    "bool": {
        "must": [
            {
                "multi_match": {
                    "query": "${search}",...

只需从您的JSON中删除您的包装“查询”,响应将显示不同的分数.

或者,您可以尝试使用extraSource而不是rawQuery,如elastic4s文档中所述.虽然它根本不适合我:

错误信息:value extraSource不是com.sksamuel.elastic4s.SearchDefinition的成员

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读