我构建了一个TermSuggestionBuilder,如下所示
TermSuggestionBuilder termSuggest = new TermSuggestionBuilder("rule")
.suggestMode("always") // Always, otherwise the results can vary
// between requests.
.text("plabel").field("_instanceName");
其中rule是索引的名称,plabel是我正在搜索的文本,_instancename是文件名。
该查询可以从Java代码正常运行,但不会返回任何结果。
构建的查询看起来像这样
"suggest" : {
"rule" : {
"text" : "pxretrievreportdata",
"term" : {
"field" : "_instanceName",
"suggest_mode" : "always"
}
}
}
当我尝试从其余客户端[http://localhost:9200/rule/_suggest]运行相同命令时,出现以下异常
"_shards": {
"total": 1,
"successful": 0,
"failed": 1,
"failures": [
{
"index": "rule",
"shard": 0,
"reason": "BroadcastShardOperationFailedException[[rule][0] ]; nested: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchIllegalArgumentException[Suggester[rule] not supported]; "
}
]
}
在其他客户端上运行时,可以给我带来预期的结果[http://localhost:9200/rule/_suggest]
{
"my-suggestion" : {
"text" : "plabel",
"term" : {
"field" : "pzInsKey"
}
}
}
请让我知道我在构造TermSuggestionBuilder时犯了什么错误,因为从其余客户端运行时后面的查询确实返回了预期的结果。
最佳答案
您在Java api中的实现无效,
我将您的代码重构为
SuggestBuilder.SuggestionBuilder suggestBuilder = new TermSuggestionBuilder("my-suggestion")
.text("plabel").field("pzInsKey").suggestMode("always");
SuggestRequestBuilder requestBuilder = client.prepareSuggest("rule")
.addSuggestion(suggestBuilder);
我没有检查输出,但应该可以。
关于exception - Elasticsearch中的TermSuggestionBuilder Java API不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434356/