首页 > 解决方案 > java api中的短语建议者整理查询

问题描述

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

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

会导致这样的事情:

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

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

标签: javaelasticsearch

解决方案


我通过使用常规 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 推送查询,因此您无需担心反斜杠转义等问题。


推荐阅读