4

我是 ES 新手,正在尝试使用 java api 进行搜索。我无法弄清楚如何使用 java api 提供特定的提升。这是示例:我的索引文档如下所示:

_来源”: {

"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”字段中找到关键字而不是在其他字段中找到关键字,我可以在查询时做些什么来提升文档?

4

3 回答 3

17

接受的答案对我不起作用。我使用的 ES 版本是6.2.4.

QueryBuilders.multiMatchQuery(keyword)
                            .field("th_name" ,2.0f)
                            .field("th_description")
                            .field("th_show_title")
                            .field("content")

希望它可以帮助别人。

于 2018-06-11T06:41:29.243 回答
9

编辑:这已经改变并且不再在 ES 6.x 及更高版本中工作。

您还应该能够直接在多匹配查询中提升字段:

“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" );

免责声明:未经测试

于 2013-03-14T08:28:03.350 回答