我正在尝试使用dynamic_templates在ElasticSearch(版本2.3.4)中创建完成映射,以便稍后我可以通过点击myindex / _suggest uri来获得任何看起来像“名称”的建议。
以下是我如何设置它:
curl -XPUT "http://127.0.0.1:9200/myindex" -d'
{
"mappings": {
"document": {
"dynamic_templates": [
{
"names": {
"match_mapping_type": "string",
"path_match": "*.name",
"mapping": {
"type": "string",
"fields": {
"completion":{
"type": "completion",
"analyzer": "standard",
"search_analyzer": "standard",
"payloads": true
}
}
}
}
},
]
}
}
}'
以下是我在ES中的内容(使用elasticsearch-head插件查看内容):
{
"_index": "myindex",
"_type": "mytype",
"_id": "57b5123f3ca9d3ec007c285a",
"_version": 2,
"_score": 1,
"_source": {
"foo": {
"name": "bar",
}
}
}
以下是我在_suggest uri上查询的内容:
{
"foo_suggest" : {
"text" : "bar",
"completion" : {
"field" : "foo.name.completion"
}
}
}
我得到的回复是“[foo.name.completion]不是完成建议字段”的错误:
RemoteTransportException[[Gorgeous George][127.0.0.1:9300][indices:data/read/suggest[s]]]; nested: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchException[Field [foo.name.completion] is not a completion suggest field];
Caused by: ElasticsearchException[failed to execute suggest]; nested: ElasticsearchException[Field [foo.name.completion] is not a completion suggest field];
at org.elasticsearch.action.suggest.TransportSuggestAction.shardOperation(TransportSuggestAction.java:152)
at org.elasticsearch.action.suggest.TransportSuggestAction.shardOperation(TransportSuggestAction.java:61)
at org.elasticsearch.action.support.broadcast.TransportBroadcastAction$ShardTransportHandler.messageReceived(TransportBroadcastAction.java:282)
at org.elasticsearch.action.support.broadcast.TransportBroadcastAction$ShardTransportHandler.messageReceived(TransportBroadcastAction.java:278)
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75)
at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: ElasticsearchException[Field [name.completion] is not a completion suggest field]
at org.elasticsearch.search.suggest.completion.CompletionSuggester.innerExecute(CompletionSuggester.java:53)
at org.elasticsearch.search.suggest.completion.CompletionSuggester.innerExecute(CompletionSuggester.java:44)
at org.elasticsearch.search.suggest.Suggester.execute(Suggester.java:41)
at org.elasticsearch.search.suggest.SuggestPhase.execute(SuggestPhase.java:85)
at org.elasticsearch.action.suggest.TransportSuggestAction.shardOperation(TransportSuggestAction.java:147)
... 9 more
我离开了吗?我做错了什么/非法?我在索引创建时没有收到任何错误 - 只有在我尝试点击_suggest uri时才会失败(并且_search正常工作)。