【发布时间】:2021-08-17 07:15:53
【问题描述】:
尝试使用 CompletionSuggester 实现自动完成功能,通过 Java 的 RestHighLevelClient 实现完成建议的方法有多种,想了解以下这些方法之间是否有任何区别(在性能/查询执行速度方面)
1:使用 CompletionSuggestionBuilder(耗时 8mill-sec):
val completionSuggestionBuilder = SuggestBuilders.completionSuggestion("field_name").prefix("ban", Fuzziness.ONE).size(10)
val suggestBuilder = SuggestBuilder().addSuggestion("find_by_prefix", completionSuggestionBuilder)
val searchSourceBuilder = SearchSourceBuilder().suggest(suggestBuilder)
val searchRequest = SearchRequest("locations").source(searchSourceBuilder)
val searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT)
2:使用 SimpleQueryString(耗时 30 秒):
val query = """{"suggest":{"find_by_prefix":{"prefix":"Ban","completion":{"field":"field_name","size":10,"fuzzy":{"fuzziness":1},"contexts":{"locationType":[{"context":"AREA","boost":1},{"context":"CITY","boost":1}],"geolocation":[{"lon":77.6279354,"lat":12.9331699,"precision":"30km","boost":2}]}}}}}"""
val searchSourceBuilder = SearchSourceBuilder().query(QueryBuilders.simpleQueryStringQuery(query))
val searchRequest = SearchRequest("locations").source(searchSourceBuilder)
val searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT)
【问题讨论】:
-
由于您是通过网络执行操作,因此您在代码中所做的任何事情都无关紧要,并且比实际的网络调用要快几个数量级。也就是说:无论是更容易向您、未来您和您团队中的其他开发人员扩展的东西。就个人而言,我会选择建设者
标签: java elasticsearch resthighlevelclient