ElasticSearch 是否支持定义固定排名策略?

Does ElasticSearch support define fixed ranking strategy?

每次我使用相同的查询,例如下面的代码:

{
"bool": {
    "should": [
        {
          "multi_match" : {
            "query":      "Will Smith",
            "type":       "cross_fields",
            "fields":     [ "first", "last" ],
            "minimum_should_match": "50%" 
          }
        },
        {
          "multi_match" : {
            "query":      "Will Smith",
            "type":       "cross_fields",
            "fields":     [ "*.edge" ]
          }
        }
    ]
}}

每次我使用不同的查询词,但参数都是一样的。

elasticsearch是否支持这种我们可以定义的策略,比如排名策略?每次我只需要输入查询。

Elasticsearch 支持 template 查询,您可以在其中注册查询并将查询字符串作为参数传递

示例:

  1. 创建一个 .scripts 索引(如果不存在)
PUT <server::port>/.scripts
  1. 注册上述案例的查询模板
 PUT <server::port>/_search/template/<template_name>
 {    
  "template": {
  "query": {
     "bool": {
        "should": [
           {
              "multi_match": {
                 "query": "{{query_string}}",
                 "type": "cross_fields",
                 "fields": [
                    "first",
                    "last"
                 ],
                 "minimum_should_match": "50%"
              }
           },
           {
              "multi_match": {
                 "query": "{query_string}",
                 "type": "cross_fields",
                 "fields": [
                    "*.edge"
                 ]
              }
           }
        ]
     }
  }    

} }

  1. 使用 query_string 参数调用搜索模板
 POST <server::port>/index>/_search/template {    
    "template": {
        "id": "<template_name>"    
    },    
    "params": {
        "query_string": "will smith"    
    }      
 }