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 查询,您可以在其中注册查询并将查询字符串作为参数传递
示例:
- 创建一个 .scripts 索引(如果不存在)
PUT <server::port>/.scripts
- 注册上述案例的查询模板
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"
]
}
}
]
}
}
}
}
- 使用 query_string 参数调用搜索模板
POST <server::port>/index>/_search/template {
"template": {
"id": "<template_name>"
},
"params": {
"query_string": "will smith"
}
}
每次我使用相同的查询,例如下面的代码:
{
"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 查询,您可以在其中注册查询并将查询字符串作为参数传递
示例:
- 创建一个 .scripts 索引(如果不存在)
PUT <server::port>/.scripts
- 注册上述案例的查询模板
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" ] } } ] } }
} }
- 使用 query_string 参数调用搜索模板
POST <server::port>/index>/_search/template { "template": { "id": "<template_name>" }, "params": { "query_string": "will smith" } }