需求:搜索標題中包含java的帖子,同時若是標題中包含hadoop和elasticsearch就優先搜索出來,同時,若是一個帖子包含java hadoop,一個帖子包含java elasticsearch,包含hadoop的帖子要比elasticsearch優先搜索出來。java
搜索條件的權重,boost,能夠將某個搜索條件的權重加大,此時當匹配這個搜索條件和匹配另外一個搜索條件的document,計算relevance score時,匹配權重更大的搜索條件的document, relevance score會更高,固然也就會優先被返回回來。elasticsearch
在默認的狀況下,搜索條件的權重都是同樣的,都是1oop
GET /forum/_search { "query": { "bool": { "must": [ { "match": { "title": "java" } } ], "should": [ { "match": { "title": "hadoop" } }, { "match": { "title": "elasticsearch" } }, { "match": { "title": "spark" } } ] } } }
這個測試很差復現,在出現的結果中若是不是咱們想要的,咱們能夠根據上面的需求調節一下boost,來讓最後的返回結果達到咱們的預期。測試
GET /forum/_search { "query": { "bool": { "must": [ { "match": { "title": "java" } } ], "should": [ { "match": { "title": { "query": "hadoop", "boost": 5 } } }, { "match": { "title": { "query": "elasticsearch", "boost": 3 } } }, { "match": { "title": { "query": "spark", "boost": 1 } } } ] } } }