如何使用 Elasticsearch java api 进行短语建议查询?
Posted
技术标签:
【中文标题】如何使用 Elasticsearch java api 进行短语建议查询?【英文标题】:How can I make phrase suggester query with 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 编写此查询。你能帮我解决这个问题吗?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于如何使用 Elasticsearch java api 进行短语建议查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 手动展平 Elasticsearch 嵌套的 JSON 文档?