我正在遵循此处给出的建议,以便使用elasticsearch查找部分单词:
ElasticSearch n-gram tokenfilter not finding partial words
我创建了一个简单的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}
谁能看到我做错了什么?搜索谷歌开始自动填充“映射未找到弹性搜索”,所以这似乎是一个非常常见的错误。
答案 0 :(得分:91)
事实证明这种情况正在发生,因为需要将映射应用于类型:
我尝试将它应用于错误的事情:
curl -XPUT 10.160.86.134:9200/products/_mapping -d '{
需要将其应用于类似的类型:
curl -XPUT 10.160.86.134:9200/products/product/_mapping -d '{
令人遗憾的是,简单的谷歌搜索无法回答这个问题。我之前链接的帖子也是非常误导,答案是错误的,我也会在那里指出。
答案 1 :(得分:2)
在弹性搜索中可以设置索引的映射。我用最新版本的Elastic search 1.7.3尝试了这个,我能够成功地将映射设置为索引。
我尝试了以下内容,
答案 2 :(得分:-1)
我认为Travis是正确的,也许这个错误来自某些旧版本的ES,某些旧版本的ES中的“类型”就像关系数据库中的一个表,“索引”就像一个数据库, “ doc”就像一条记录。如今,“类型”似乎消失了。
您可以从here看到此内容。
我不知道为什么我不能上传图片。