elasticsearch 多条件查询 - 权重查询
根据得分查询 should
使用得分之前
POST http://192.168.199.126:9200/film/dongzuo/_search/
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "战"
}
}
]
}
}
}

使用得分之后 should
POST http://192.168.199.126:9200/film/dongzuo/_search/
{
"query": {
"bool": {
"must": {
"match": {
"title": "战"
}
},
"should": [
{
"match": {
"content": "星球"
}
},
{
"range": {
"publishDate": {
"gte": "2018-01-01"
}
}
}
]
}
}
}

使用得分查询 Java接口实现
部分代码
private TransportClient client;
private static String host="192.168.199.126";
private static int port=9300; // 程序连接的端口
// 配置settings 集群相关
private static Settings.Builder settings = Settings.builder().put("cluster.name","my-application");
@Before
public void init() throws UnknownHostException {
client = new PreBuiltTransportClient(settings.build())
.addTransportAddress(new TransportAddress(InetAddress.getByName(host), port));
}
@After
public void close(){
if(client!=null){
client.close();
}
}
/**
* 多条件查询 使用should 提高得分
* @throws Exception
*/
@Test
public void searchMutil3()throws Exception{
SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");
QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "星球");
// 范围查询 gte方法 不包含小写,gt方法包含小写 即 includeLower=true
QueryBuilder queryBuilder3=QueryBuilders.rangeQuery("publishDate").gt("2018-01-01");// 范围查询 gt表示大于
SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()
.must(queryBuilder)
.should(queryBuilder2) // 设置权重
.should(queryBuilder3)) // 设置权重
.execute()
.actionGet();
SearchHits hits=sr.getHits();
for(SearchHit hit:hits){
System.out.println(hit.getScore()+":"+hit.getSourceAsString());
}
}
