java - java api中的短语建议者整理查询
问题描述
elasticsearch java API 中的 PhraseSuggestionBuilder 有一个 collateQuery 方法,该方法将字符串作为输入。但是有一个问题,这段代码:
collateQuery("\"match\": {\"title.phrase\" : \"{{suggestion}}\"}")
会导致这样的事情:
"collate" : {
"query" : "\"match\": {\"title\" : \"{{suggeston}}\"}"
}
如您所见,转义引号仍然存在,并且出现“无法导出 xcontent”错误。我找不到使用 java api 的 collateQuery 示例。我应该怎么办?
解决方案
我通过使用常规 QueryBuilder 构建整理查询,在 Java API 中解决了这个问题,例如:
MatchQueryBuilder cq = QueryBuilders.matchQuery("title", "some text");
然后,我通过调用它的 toString 方法将它添加到整理中:
String queryText = "the user query";
SuggestBuilder suggest = new SuggestBuilder()
.setGlobalText(queryText)
.addSuggestion("body",
SuggestBuilders
.phraseSuggestion("your.field")
.size(3)
.gramSize(3)
.addCandidateGenerator(new DirectCandidateGeneratorBuilder("your.field")
.suggestMode("missing"))
.collateQuery(cq.toString())
.collatePrune(true));
toString() 调用似乎通过 Elasticsearch 的 XContentBuilder 推送查询,因此您无需担心反斜杠转义等问题。
推荐阅读
- firebase - 什么是安排我的 Firestore 数据库的可扩展方式
- php - 查询连接两个表
- python - 让方法返回“自我”以链接方法调用是否很好?
- mysql - 如何使用 EntityManager 为 MySql JSON_EXTRACT 函数创建 JPQL 查询
- html - Flexbox - 如何自动跳转到下一列?
- java - 传递和返回没有“new”关键字的类对象
- python - 如果谷歌云断开连接,如何恢复 anaconda 环境
- svg - 将地理坐标点投影到 SVG 生成的地图中
- spring - 如何使用 Spring vs JavaFx 在 fxml 文件中实现 ToggleGroup
- laravel - 了解 Laravel 中的路由