短语建议程序整理Java API中的查询

时间:2018-07-07 12:47:46

标签: java elasticsearch

elasticsearch Java API中的PhraseSuggestionBuilder具有collat​​eQuery方法,该方法将String作为输入。但是有一个问题,这段代码:

collateQuery("\"match\": {\"title.phrase\" : \"{{suggestion}}\"}")

将导致如下所示:

"collate" : {
"query" : "\"match\": {\"title\" : \"{{suggeston}}\"}"
}

如您所见,转义引号仍然存在,并且出现“无法派生xcontent”错误。我找不到使用Java api的collat​​eQuery的示例。我该怎么办?

1 个答案:

答案 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推送查询,因此您不必担心反斜杠转义等等。