我们如何使用建议API查询使用Java API客户端在ElasticSearch?

klsxnrf1  于 2022-12-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(156)

文档没有说明如何将新的suggestapi用于JavaApi客户端(不是高级的rest客户端),索引非常简单,下面是Map

{
  "mappings": {
      "properties": {
        "name": {
          "type": "completion",
          "contexts": [
            {
              "name": "place_type",
              "type": "category"
            }
          ]
        },
        "entityId": {
          "type": "keyword"
        }
      }
    
  }
}

我将基本前缀与上下文过滤一起使用

{
  "suggest": {
    "place_suggestion": {
      "prefix": "oli",
      "completion": {
        "field": "name",
        "size": 10,
        "contexts": {
          "place_type": [ "d2c" ]
        }
      }
    }
  }
}

任何人都可以帮助我的java代码片段为相同的搜索查询.弹性客户端版本:7.17.6使用以下弹性客户端:https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/7.17/connecting.html

5jvtdoz2

5jvtdoz21#

请尝试以下代码:
Map〈字符串,列表〉mapContext =新哈希Map〈〉();Map上下文放置("地点类型",列表(完成上下文的(cc-〉cc上下文(ctx-〉ctx类别("d2c")))));

Map<String, FieldSuggester> map = new HashMap<>();
map.put("place_suggestion", FieldSuggester.of(fs -> fs
    .completion(cs -> cs.skipDuplicates(true)
        .size(5)
        .field("name")
        .contexts(mapContext)
    )
));

Suggester suggester = Suggester.of(s -> s
    .suggesters(map)
    .text("oli")
);

var response = client.search(s ->
        s.index("idx_test")
            .suggest(suggester)
    , Void.class);

var suggestions = response.suggest().get("place_suggestion");

for (var suggest : suggestions) {
  for (var option : suggest.completion().options()) {
    System.out.println("suggestion: " + option.text());
  }
}

相关问题