主要知识点:
- 学会在should中使用boost进行权重控制
假如现在有一个需求:要把should中某些字段优先显示,
1、不加boost权重控制
GET /forum/article/_search
{
"query": {
"bool": {
"must": [{"match": {"title": "blog"}}],
"should": [
{"match": {"title": "java"}},
{"match": {"title": "elasticsearch"}},
{"match": {"title": "hadoop"}},
{"match": {"title": "spark"}}
]
}
}
}
2、加上boost控制权重
GET /forum/article/_search
{
"query": {
"bool": {
"must": [{"match": {"title": "blog"}}],
"should": [
{"match": {"title": "java"}},
{"match": {"title": "elasticsearch"}},
{"match": {"title": "hadoop"}},
{"match": {"title": {"query":"spark","boost":5}}}
]
}
}
}
发现加上boost权重控制之后,spark总是会在第一个出现。
总结:
1、注意上面两种写法:{"match": {"title": "spark"}},在不加boost的情况下,title后可以直接加要搜索的字符串,如果是加上boost,则必须是一个json格式,query对应字符串,boost对应权重。
2、默认情况下,搜索条件的权重都是一样的,都是1。