【问题标题】:how to add filters to elastic query when using function_score?使用function_score时如何向弹性查询添加过滤器?
【发布时间】:2020-11-05 02:52:14
【问题描述】:

这是我当前的弹性查询:

{
    "from": 0,
    "size": 10,
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": [{
                        "multi_match": {
                            "query": "ocean",
                            "fields": [],
                            "fuzziness": "AUTO"
                        }}],
                    "must_not": [{
                        "exists": {
                            "field": "parentId"
                        }
                    }]
                }
            },
            "functions" : [
                {
                    "gauss": {
                            "createTime": {
                                    "origin": "2020-07-09T23:50:00",
                                    "scale": "365d",
                                    "decay": 0.3
                            }
                    }
                }
            ]
        }
    }
}

如何正确添加过滤器?我想也许是我使用function_score 的事实使这有所不同?我想添加一个硬过滤器,例如,只向我显示带有uploadUser: 'Mr. Bean' 的结果...但仍然为通过此过滤器的结果保留评分。

我尝试在各个地方使用filter,也使用must,但我要么没有得到任何结果,要么得到所有结果。

我正在使用 Elastic Search 7。感谢您的帮助

【问题讨论】:

  • 你能分享你期望得到的样本数据和结果吗?

标签: elasticsearch search elastic-stack


【解决方案1】:

您可以尝试以下搜索查询:

请参考此 ES 官方documentation 了解更多功能分数查询

    {
  "from": 0,
  "size": 10,
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "filter": {
            "term": {
              "uploadUser": "Mr. Bean"
            }
          },
          "must": [
            {
              "multi_match": {
                "query": "ocean",
                "fields": [
                  
                ],
                "fuzziness": "AUTO"
              }
            }
          ],
          "must_not": [
            {
              "exists": {
                "field": "parentId"
              }
            }
          ]
        }
      },
      "functions": [
        {
          "gauss": {
            "createTime": {
              "origin": "2020-07-09T23:50:00",
              "scale": "365d",
              "decay": 0.3
            }
          }
        }
      ]
    }
  }
}

【讨论】:

  • @tyler-g 你能试试上面的搜索查询吗,让我知道这是否有效?而且,如果您还可以提供一些示例索引数据和您的预期结果,那就太好了
  • 我尝试过这种方式,不幸的是没有得到任何结果。如果没有“过滤器”,我会得到几个结果,我可以看到其中一些有 uploadUser: Mr. Bean 但是一旦我打开过滤器,我就没有结果
  • @tyler-g 能否请您分享您的索引数据和映射,甚至您希望根据该索引数据获得什么搜索结果?
  • @tyler-g 你有机会看我的回答吗,期待得到你的反馈:)
  • 是的,谢谢您的反馈@Bhavya!
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多