我是ES新手并尝试使用java apis进行搜索。我无法弄清楚如何使用java apis提供特定的提升。 这是一个例子: 我的索引文档如下:
_source“:{
"th_id": 1,
"th_name": "test name",
"th_description": "test desc",
"th_image": "test-img",
"th_slug": "Make-Me-Smart",
"th_show_title": "Coast Tech Podcast",
"th_sh_category": "Alternative Health
}
当我搜索关键字时,如果他们在“th_name”中找到的结果与在其他某些字段中找到的结果相比,我希望提高结果。 目前我使用下面的代码进行搜索:
QueryBuilder qb1 = QueryBuilders.multiMatchQuery(keyword, "th_name", "th_description", "th_show_title", "th_sh_category");
SearchResponse response = client.prepareSearch("talk").setTypes("themes")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(qb1)
.setFrom(start).setSize(maxRows)
.setExplain(true).execute().actionGet();
如果在“th_name”字段中找到与在其他字段中找到的关键字相比,我在查询时可以执行任何操作来提升文档吗?
答案 0 :(得分:9)
您还应该能够在多匹配查询中直接提升字段:
“multi_match查询支持通过字段json字段中的^表示法进行字段提升。
{
"multi_match" : {
"query" : "this is a test",
"fields" : [ "subject^2", "message" ]
}
}
在上面的示例中,主题字段中的匹配比消息字段中的重要性高2倍。“
在java-api中,只需使用MultiMatchQueryBuilder:
MultiMatchQueryBuilder builder =
new MultiMatchQueryBuilder( keyword, "th_name^2", "th_description", "th_show_title", "th_sh_category" );
免责声明:未经测试
答案 1 :(得分:7)
接受的答案对我不起作用。我使用的ES版本是QueryBuilders.multiMatchQuery(keyword)
.field("th_name" ,2.0f)
.field("th_description")
.field("th_show_title")
.field("content")
。
appendChild
希望它可以帮助别人。
答案 2 :(得分:0)