ElasticSearch:如何使用dynamic_templates为建议指定映射

时间:2016-08-22 05:47:46

标签: java elasticsearch mapping

我正在尝试使用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正常工作)。

0 个答案:

没有答案