首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Elasticsearch进行短语提示查询?

如何使用Elasticsearch进行短语提示查询?
EN

Stack Overflow用户
提问于 2021-12-20 13:55:17
回答 2查看 282关注 0票数 0

我在用7.10。elasticsearch版本。我创建了一个索引并进行了设置-映射。然后,我使用http请求将查询发送到索引。我得到了我需要的结果,但是我想用Java做同样的事情。但是,我做不到。你能帮我从零开始发送请求并在java中作为列表获取结果吗?

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

代码语言:javascript
运行
复制
{
  "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编写此查询。你能帮我弄清楚吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-22 09:22:50

最后我找到了我自己的答案。由于缺乏关于这类具体主题的文件,很难找到解决办法。我要为那些想知道的人分享我的解决方案:

代码语言:javascript
运行
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2021-12-20 21:05:57

这将是构建请求的方式:

代码语言:javascript
运行
复制
    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?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70422910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档