首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElasticSearch:将bool和script_score合并在一个查询中

ElasticSearch:将bool和script_score合并在一个查询中
EN

Stack Overflow用户
提问于 2022-02-23 14:40:38
回答 1查看 146关注 0票数 3

我有一个现有的弹性bool查询。我在索引中添加了一个密集的向量字段,并希望在一个查询中搜索它。弹性文档的复合查询部分似乎意味着您可以这样做,但是我无法使它工作(我得到了一个运行时错误),并且没有找到任何示例。以下是我正在尝试的一个简化版本。

代码语言:javascript
复制
localQuery = {
            'bool': 
                'should': [
                    {
                        "match_phrase": {
                            "field1": {
                                "query": query,
                                "boost": 10
                            }
                        }
                    },
                    {
                        "match_phrase": {
                            "field2": {
                                "query": query,
                                "boost": 6
                            }
                        }
                    },
                    {
                         "script_score": {
                           "query": {
                              "match_all": {}
                            },
                         "script": {
                            "source": "cosineSimilarity(params.element_desc_vector, 
                                                       'description_vec') + 1.0",
                            "params": {"element_desc_vector": queryList}
                         }
                      }
                   }
               ]
             }

我希望有任何建议,一些例子,甚至是一个单位“不,你不能那样做”。

谢谢霍华德

EN

回答 1

Stack Overflow用户

发布于 2022-10-31 11:50:53

为了做同样的事情,我终于发现你可以从脚本中访问得分了。因此,您可以将在“应该”子句中返回的分数添加到余弦相似项中。另外,我把bool子句放在script_score中,而不是反之亦然。

代码语言:javascript
复制
local_query = {
        "script_score": {
          "query": {
            "bool": {
              "should": [
                {
                  "match_phrase": {
                    "field1": {
                      "query": query,
                      "boost": 10
                    }
                  }
                },
                {
                  "match_phrase": {
                    "field2": {
                      "query": query,
                      "boost": 6
                    }
                  }
                }
              ]
            }
          },
          "script": {
            "source": "(cosineSimilarity(params.element_desc_vector, 'description_vec') + 1.0) + _score",
            "params": {
              "element_desc_vector": queryList
            }
          }
        }
      }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71238973

复制
相关文章

相似问题

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