multiMatchQuery でカスタム スコア クエリを使用しています。最終的に私が望むのはシンプルで、説明はほとんど必要ありません。Java カスタム スコア スクリプトで、結果がどのフィールドに一致したかを見つけられるようにしたいと考えています。
例:
Starbucks を検索した結果、Starbucks という名前が返された場合、name.basic がクエリに一致したフィールドであることを知りたいと考えています。コーヒーを検索してスターバックスが戻ってきたら、タグが一致したフィールドであったことを知りたいです。
とにかくこれを行うことはありますか?
検索クエリ コード:
def basicSearchableSearch(t: String, lat: Double, lon: Double, r: Double, z: Int, bb: BoundingBox, max: Int): SearchResponse = {
val multiQuery = filteredQuery(
multiMatchQuery(t)
//Matches businesses and POIs
.field("name.basic").operator(Operator.OR)
.field("name.no_space")
//Businesses only
.field("tags").boost(6f),
geoBoundingBoxFilter("location")
.bottomRight(bb.botRight.y,bb.botRight.x)
.topLeft(bb.topLeft.y,bb.topLeft.x)
)
val customQuery = customScoreQuery(
multiQuery
)
.script("customJavaScript")
.lang("native")
.param("lat",lat)
.param("lon",lon)
.param("zoom",z)
global.Global.getClient().prepareSearch("searchable")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(customQuery)
.setFrom(0).setSize(max)
.execute()
.actionGet();
}