0

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

1 に答える 1