我正在努力完成索引创建这一简单任务,目标是使用分析器和字段映射创建索引。当我使用分析器创建索引时,我可以通过分析api调用与分析器通信,但是当我添加映射信息时,创建索引调用失败,并显示“字段[$ field]]找不到Analyzer [analyzer1]”,我创建了一个脚本来显示问题:
#!/bin/bash INDEX_NAME="test1" echo "delete index just to be sure" curl -XDELETE "http://localhost:9200/$INDEX_NAME/"; echo echo "create new index" curl -X PUT "http://localhost:9200/$INDEX_NAME/" -d '{ "index":{ "analysis":{ "analyzer":{ "analyzer1":{ "type":"custom", "tokenizer":"standard", "filter":[ "standard", "lowercase", "stop", "kstem", "ngram" ] } }, "filter":{ "ngram":{ "type":"ngram", "min_gram":2, "max_gram":15 } } } } }'; echo echo "analyze something with our shiny new analyzer" curl -XGET "localhost:9200/$INDEX_NAME/_analyze?analyzer=analyzer1&pretty=true" -d 'abcd' echo "remove the created index" curl -XDELETE "http://localhost:9200/$INDEX_NAME/"; echo echo "create new index again with mapping" curl -X PUT "http://localhost:9200/$INDEX_NAME/" -d '{ "index":{ "analysis":{ "analyzer":{ "analyzer1":{ "type":"custom", "tokenizer":"standard", "filter":[ "standard", "lowercase", "stop", "kstem", "ngram" ] } }, "filter":{ "ngram":{ "type":"ngram", "min_gram":2, "max_gram":15 } } } }, "mappings": { "product": { "properties": { "title": { "type": "string", "search_analyzer" : "analyzer1", "index_analyzer" : "analyzer1" } } } } }'; echo
我相信您的问题是这些analysis设置需要嵌套在settingsJSON的一个index节点内,而不是您所拥有的嵌套在一个节点内。请参考Elasticsearch Create Index API,以获取有关构造JSON的详细信息。
analysis
settings
index
因此,您的创建索引调用应如下所示:
curl -X PUT "http://localhost:9200/$INDEX_NAME/" -d '{ "settings":{ "analysis":{ "analyzer":{ "analyzer1":{ "type":"custom", "tokenizer":"standard", "filter":[ "standard", "lowercase", "stop", "kstem", "ngram" ] } }, "filter":{ "ngram":{ "type":"ngram", "min_gram":2, "max_gram":15 } } } }, "mappings": { "product": { "properties": { "title": { "type": "string", "search_analyzer" : "analyzer1", "index_analyzer" : "analyzer1" } } } } }';