elasticsearch Java API中的PhraseSuggestionBuilder具有collateQuery方法,该方法将String作为输入。但是有一个问题,这段代码:
collateQuery("\"match\": {\"title.phrase\" : \"{{suggestion}}\"}")
将导致如下所示:
"collate" : {
"query" : "\"match\": {\"title\" : \"{{suggeston}}\"}"
}
如您所见,转义引号仍然存在,并且出现“无法派生xcontent”错误。我找不到使用Java api的collateQuery的示例。我该怎么办?
答案 0 :(得分:0)
我通过使用常规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推送查询,因此您不必担心反斜杠转义等等。