当前位置: 首页 > 知识库问答 >
问题:

Elasticsearchfunction_score查询

孙恩
2023-03-14

我正在使用Elasticsearch v 1.7.3

以下是我在文档中的字段:

       Field1, Field2, Field3, Field4

我需要给每个字段赋予权重,比如字段1:40,字段2:40,字段3:10,字段4:10

在索引过程中,字段1和字段2扩展为其语音标记。所以我们有Field1==

我的查询可以基于上述4个字段中的任何一个的组合。

现在对于评分,我不想使用TF/IDF或BM25评分模型。

相反,我只想计算每个字段的加权平均值并将它们相加。

For example for input query:

Field1: ABC
Field2: PQR
Field3: XYZ
Field4: RST

假设语料库中有以下文档:

Document 1
-----------
Field1: ABC
Field2: PQR
Field3: XYZ
Field4: RST

Document 2
-----------
Field1: ABX
Field2: PQR
Field3: XYZ
Field4: RST

文档1的分数:100==

文件2得分:90==

我可以在function_score查询中这样做吗?我不太明白这是如何实现的。谢谢。

共有1个答案

堵鸿光
2023-03-14

您需要查看函数分数查询。在函数分数中,定义一个布尔查询,每个字段上都有过滤器和assgin提升(40或10),然后选择boost_mode作为总和。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

{
    "functions": [
        {
            "filter": {
                "query": {
                    "bool": {
                        "should": [
                            {
                                "match": {
                                    "inputloc1": "ABC"
                                }
                            }
                        ]
                    }
                }
            },
            "boost_factor": 11
        },
        {
            "filter": {
                "query": {
                    "bool": {
                        "should": [
                            {
                                "query_string": {
                                    "fields": [
                                        "input"
                                    ],
                                    "query": "xyz",
                                    "fuzziness": 0,
                                    "fuzzy_prefix_length": 0
                                }
                            }
                        ]
                    }
                }
            },
            "boost_factor": 6
        }
    ],
    "boost_mode": "sum"
}

我在代码中给出了函数的示例,但是您可以将所有查询切换为匹配(而不是查询字符串)。您在函数中定义的内容只计算分数。您在查询中定义的内容(在function_score实际上过滤了文档)。

希望这有帮助。

 类似资料:
  • 我刚开始在DynamoDB上建一个社交网站。 我将有相当数量的数据与一个用户相关,我计划将这些全部放入一个表中--例如: 用户ID 出生日期 头发 照片URL 详细信息 可能有几百个属性。 问题: 将这么多数据放入一个表中有什么问题吗? 我如何查询该数据(我是否可以执行类似这样的查询:“所有在这个年龄,这个颜色头发,这个位置,并且这次登录的成员)-假设所有这些数据都包含在表中? 如果一个表的内容很

  • 以下策略可用于仓库基础结构来解决查询。你可以在XML配置中的命名空间通过query-lookup-strategy属性来配置策略或者在JAVA配置中通过Enable${store}Repositories声明queryLookupStrategy属性。有些策略可能对于特别的datastores并不支持。 CREATE 从查询方法名来尝试构建一个特别的数据查询。一般的方法都是从方法名称中移除已知设定

  • 问题内容: 我正在尝试使用Elasticsearch获得完全匹配的结果(所以我不在乎在这里得分) 我看到有两种方法可以做到这一点: 要么 两者都能工作,并给我想要的结果。它们之间有什么区别?使用一个与另一个相比有性能优势吗? (我正在使用Elasticsearch V 5.6) 谢谢 ! 问题答案: 恒定分数查询可为任何匹配的文档提供相等的分数,而与诸如等等的任何评分因素无关。当您不关心文档是否匹

  • Graphql 为查询而生,所以我们首先试试它的查询功能吧. 准备工作 克隆库: git clone https://github.com/zhouyuexie/learn-graphql 安装依赖: cd learn-graphql && npm install 运行: npm start 现在打开你的浏览器输入http://localhost:12580/graphql,或者点击这里. Gra

  • 说明 微信支付-订单附加信息查询接口SDK。 官方文档:https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_2 类 请求参数类 请求参数 类名:\Yurun\PaySDK\Weixin\CustomDeclareQuery\Request 属性 名称 类型 说明 $_apiMethod strin

  • 说明 支付宝报关查询 官方文档:https://docs.open.alipay.com/155/104780/ 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\Customs\Submit\Request 属性 名称 类型 说明 $service string 接口名称 $out_request_no string 报关请求号 需要查询的商户端报关