我遵循这里给出的建议,以便使用elasticsearch查找部分单词:
ElasticSearch n-gram tokenfilter没有找到部分单词
我创建了一个简单的bash脚本,试图运行这个版本:
curl -XDELETE 10.160.86.134:9200/products curl -XPOST 10.160.86.134:9200/products -d '{ "index": { "number_of_shards": 1, "analysis": { "filter": { "mynGram" : {"type": "nGram", "min_gram": 2, "max_gram": 10} }, "analyzer": { "a1" : { "type":"custom", "tokenizer": "standard", "filter": ["lowercase", "mynGram"] } } } } } }' curl -XPUT 10.160.86.134:9200/products/_mapping -d '{ "product" : { "index_analyzer" : "a1", "search_analyzer" : "standard", "properties" : { "product_description": {"type":"string"}, "product_name": {"type":"string"} } } }'
运行此脚本后,前两个命令(转储产品,然后设置索引)似乎可以解决这个问题:
{"ok":true,"acknowledged":true} {"ok":true,"acknowledged":true}
然后它在映射调用后出错,给我这个:
{"error":"ActionRequestValidationException[Validation Failed: 1: mapping type is missing;]","status":500}
谁能看到我做错了什么?搜索谷歌开始自动填充"映射未找到弹性搜索",所以它似乎是一个非常常见的错误.
事实证明这种情况正在发生,因为映射需要应用于类型:
我尝试将它应用于错误的事情:
curl -XPUT 10.160.86.134:9200/products/_mapping -d '{
它需要应用于这样的类型:
curl -XPUT 10.160.86.134:9200/products/product/_mapping -d '{
令人遗憾的是,简单的谷歌搜索无法回答这个问题.我之前链接的帖子也是非常误导,答案是错误的,我也会在那里指出.