【问题标题】:How can I make phrase suggester query with Elasticsearch java api?如何使用 Elasticsearch java api 进行短语建议查询?
【发布时间】:2022-01-22 03:14:09
【问题描述】:

我使用的是 7.10。弹性搜索的版本。我创建了一个索引并进行了设置映射。然后我使用 http 请求将查询发送到索引。我得到了我需要的结果,但我想用 Java API 做同样的事情。然而,我做不到。 您能帮我从头开始发送请求并在 java 中以列表形式获取结果吗?

这是我用来获取建议的查询:

{
  "suggest": {
    "text": "some title I want to search",
    "phrase_suggester": {
      "phrase": {
        "field": "title.shingle",
                "max_errors": 2,
                "size": 5,
                "confidence": 0.0,
                "direct_generator": [{
                    "field": "title.shingle",
                    "max_edits": 2
          }
        ]
      }
    }
  }
}

如何使用 Elasticsearch Java API 编写此查询。你能帮我解决这个问题吗?

【问题讨论】:

    标签: elasticsearch spring-data-elasticsearch elasticsearch-java-api


    【解决方案1】:

    这将是构建请求的方式:

        client.search(searchRequestBuilder -> searchRequestBuilder 
            .suggest(suggestBuilder -> suggestBuilder 
                    .text("some title I want to search")
                    .suggesters("phrase_suggester", fieldSuggesterBuilder -> fieldSuggesterBuilder 
                            .phrase(phraseBuilder -> phraseBuilder.field("title.shingle")
                                    .maxErrors(2d) 
                                    .size(5) 
                                    .confidence(0.0) 
                                    .directGenerator(directGeneratorBuilder -> directGeneratorBuilder 
                                            .field("title.shingle") 
                                            .maxEdits(2))))),
            YourEntity.class);
    

    顺便说一句,新客户端是7.16,你写的是7.14?

    【讨论】:

    • 感谢您的宝贵回答,很有见地。但我不得不更新我的问题。你也可以帮我解决这个问题吗?
    【解决方案2】:

    我终于找到了自己的答案。由于缺乏有关此类特定主题的文档,因此很难找到解决方案。我正在为那些想知道的人分享我的解决方案:

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    
    PhraseSuggestionBuilder builder = SuggestBuilders.phraseSuggestion("title.shingle")
                    .addCandidateGenerator(new DirectCandidateGeneratorBuilder("title.shingle")
                            .suggestMode("always"))
                    .text(query)
                    .maxErrors(2f)
                    .confidence(0f);
    
            SuggestBuilder suggestBuilder = new SuggestBuilder().addSuggestion("suggestion", builder);
            searchSourceBuilder.suggest(suggestBuilder);
    
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("index_name");
            searchRequest.source(searchSourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2015-04-08
      • 2018-04-10
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多