Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ElasticSearch Field boosting using java api

I am new to ES and trying to search using java apis. I am unable to figure out how I can provide filed specific boosting using the java apis. Here is the example: My index document looks like:

_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

}

When i search for keywords I want to boost the results higher if they found in the "th_name" compared to they're found in some other fields. Currently I am using below code to do search:

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();

Is there anything I can do at query time to boost the document if the keyword is found in "th_name" field compared to found in other fields?

like image 446
apatel Avatar asked Nov 29 '22 02:11

apatel


1 Answers

The accepted answer did not work me. ES version I am using is 6.2.4.

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

Hope it helps someone else.

like image 59
Richa Avatar answered Dec 06 '22 18:12

Richa