首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elastic4s: rawQuery得分保持在1分

elastic4s: rawQuery得分保持在1分
EN

Stack Overflow用户
提问于 2016-04-26 11:50:54
回答 1查看 672关注 0票数 5

我们正在为elastic4s 2.2.0使用ElasticSearch。许多查询以JSON形式存储在磁盘上,并通过rawQuery驱动程序作为elastic4s使用。结果中的分数在通过命令行提交的查询和elastic4s驱动程序之间存在差异。elastic4s驱动程序总是为所有结果返回1分,而命令行执行则产生两个不同的分数(针对不同的数据类型)。

Elastic4s的代码:

代码语言:javascript
复制
   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的得分。通过命令行进行的完整查询相当长:

代码语言:javascript
复制
{
    "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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-26 12:20:57

elastic4s rawQuery将您的rawQuery封装在另一个查询对象中。

就像你会质疑

代码语言:javascript
复制
{ "query": { "query": {     
    "bool": {
        "must": [
            {
                "multi_match": {
                    "query": "${search}",
...

只要从JSON中删除包装"query“,响应就会显示出不同的分数。

或者,您可以尝试使用extraSource而不是rawQuery,就像elastic4s docu中描述的那样。虽然这对我一点也不管用:

ErrorMessage: value extraSource不是com.sksamuel.elastic4s.SearchDefinition的成员

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36864137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档