elasticsearch - 在 Elasticsearch 中过滤没有分数的查询

标签 elasticsearch

我需要修改这个查询,使 Elasticsearch 给它一个分数。我希望我的自定义过滤器分数是唯一给任何结果打分的东西。我该如何实现?

每条记录应该只有 0、100 或 1000 分。

{
  "size":50, 
  "from":0, 
  "query" : {
    "custom_filters_score" : {
      "query" : {
        "filtered" : {
          "query" : {
            "bool" : {
              "must" : [
                {"term":{"type":"alpha"}}, 
                {"field":{"sector":"exists"}}, 
                {"field":{"sector.sub":"exists"}}, 
                {"field":{"alpha_sector.sub.categories":"second"}}, 
                {"field":{"beta_sector.sub.columns":"first"}}, 
                {"term":{"beta_type":"beta"}}, 
                {"term":{"area":"624"}}
              ]
            }
          }, 
          "filter" : {
            "or" : [
              {
                "and" : [
                  {"term":{"area":"624"}}, 
                  {"term":{"start":"07242013"}}
                ]
              }, 
              {
                "and" : [
                  {"term":{"area":"624"}}, 
                  {"term":{"start":"blank"}}
                ]
              }
            ]
          }
        }
      }, 
      "filters" : [
        {"filter":{"term":{"resource":5726}}, "boost":"1000"}, 
        {"filter":{"term":{"alpha_resource":5726}}, "boost":"100"}
      ], 
      "score_mode":"sum"
    }
  }
}

最佳答案

我不太确定你在这里想要达到什么目的

            {"field":{"sector":"exists"}}, 
            {"field":{"sector.sub":"exists"}},

但一般来说,如果您不希望查询的一部分影响分数,只需将其设为过滤器即可。最好将“bool”与“term”过滤器一起使用,而不是“and”/“or”/“not”

{
  "size":50, 
  "from":0, 
  "query" : {
    "custom_filters_score" : {
      "query" : {
        "filtered" : {
          "query" : {
            "match_all": {}
          }, 
          "filter" : {
            "bool" : {
              "must" : [
                {"term":{"type":"alpha"}}, 
                {"query":{"field":{"sector":"exists"}}}, 
                {"query":{"field":{"sector.sub":"exists"}}}, 
                {"query":{"field":{"alpha_sector.sub.categories":"second"}}}, 
                {"query":{"field":{"beta_sector.sub.columns":"first"}}}, 
                {"term":{"beta_type":"beta"}}, 
                {"term":{"area":"624"}}
              ],
              "should" : [
                {
                  "bool" : {
                    "must" : [
                      {"term":{"area":"624"}}, 
                      {"term":{"start":"07242013"}}
                    ]
                  }
                }, 
                {
                  "bool" : {
                    "must": [
                      {"term":{"area":"624"}}, 
                      {"term":{"start":"blank"}}
                    ]
                  }
                }
              ]
            }
          }
        }
      }, 
      "filters" : [
        {"filter":{"term":{"resource":5726}}, "boost":"1000"}, 
        {"filter":{"term":{"alpha_resource":5726}}, "boost":"100"}
      ], 
      "score_mode":"total"
    }
  }
}

关于elasticsearch - 在 Elasticsearch 中过滤没有分数的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17732670/

相关文章:

c# - 如何创建一个可以从多个数据源提取数据的 IQueryable Web API?

amazon-web-services - 在 amazon s3 存储库中存储 Elasticsearch 快照。它是如何工作的

elasticsearch - ElasticSearch-如何从动态字段元数据查询查询?

elasticsearch - 在 Elasticsearch 中仅按术语频率对文档评分,而不是按逆文档频率评分

elasticsearch - 如何忽略具有空值或不存在的嵌套对象

elasticsearch - 在 Elasticsearch 中为现有映射添加默认值

elasticsearch - 如何在Elastic Search中使用默认值更新整个索引的字段值

python - 如何在Python中使用Elasticsearch索引JSON格式的文件?

angularjs - angularjs elasticsearch typeahead匹配未定义

python - 从 Kibana 获取 elasticsearch 查询