elasticsearch - 有没有办法在两次出现之间更改加法 Action ? (在 bool 查询中)

标签 elasticsearch scoring booleanquery

我有下一个查询:

curl -X POST "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool" : {

      "must" : 
        { "term" : 
          { "message" : 
            {
              "value": "message",
              "boost": 2.0 
            }
          } 
        },
        "should" : 
        { "term" : 
          { "message" : 
            {
              "value": "message",
              "boost": 2.0 
            }
          } 
        }
    
    }
  }
}
'
我从此响应中获得的_score_score的2倍(我没有任何范围(must / should)就得到了)
我的问题是是否可以将操作更改为多个,而不是添加,例如-代替_score + _score,我将获得_score * _score

最佳答案

您可以使用function score query
一个工作示例(使用脚本分数):_score将乘以_score 映射

PUT index
{
  "mappings": {
    "properties": {
      "message": {
        "type": "keyword"
      }
    }
  }
}
插入文档
POST index/_doc/1
{
  "message":"message"
}

POST index/_doc/2
{
  "message":"message"
}
不包含script_score的搜索查询
GET index/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "message": {
                  "value": "message"
                }
              }
            }
          ],"should": [
            {
              "term": {
                "message": {
                  "value": "message"
                }
              }
            }
          ]
        }
      }
    }
  }
}
结果:
"hits" : [
      {
        "_index" : "index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.3862944,
        "_source" : {
          "message" : "message"
        }
      },
      {
        "_index" : "index",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.3862944,
        "_source" : {
          "message" : "message"
        }
      }
    ]
使用script_score进行搜索查询
GET index/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "message": {
                  "value": "message"
                }
              }
            }
          ],"should": [
            {
              "term": {
                "message": {
                  "value": "message"
                }
              }
            }
          ]
        }
      },
      "script_score": {
        "script": {
          "source": "_score"
        }
      }
    }
  }
}
结果
"hits" : [
      {
        "_index" : "index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.921812,
        "_source" : {
          "message" : "message"
        }
      },
      {
        "_index" : "index",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 1.921812,
        "_source" : {
          "message" : "message"
        }
      }
    ]

关于elasticsearch - 有没有办法在两次出现之间更改加法 Action ? (在 bool 查询中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64314713/

相关文章:

elasticsearch - elasticsearch:为每个数组匹配添加权重

Python简单游戏的简单得分(点)系统

java - Lucene 6.0!如何实例化 BooleanQuery 并在其中添加其他搜索查询?

mysql - 理解全文 bool 模式结果

lucene - 为什么路由不适用于 ElasticSearch Bulk API?

php - PHP MYSQL 如何添加多个评分结果

ruby-on-rails-3 - 将SQL与 Elasticsearch 结合使用

elasticsearch - 在Elasticsearch中使用带有BoolQueryBuilder的SuggestionBuilder

elasticsearch - Elasticsearch not_analyzed字段转换双 '$'符号

performance - 当我只想要前10个存储桶时,是否可以使Elasticsearch聚合更快?