53

我正在遵循此处给出的建议,以便使用 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}

谁能看到我做错了什么?搜索谷歌开始自动完成“映射未找到弹性搜索”,所以这似乎是一个非常常见的错误。

4

3 回答 3

138

事实证明这是因为映射需要应用于类型:

我尝试将其应用于错误的事物:

curl -XPUT 10.160.86.134:9200/products/_mapping -d '{

它需要像这样应用于类型:

curl -XPUT 10.160.86.134:9200/products/product/_mapping -d '{

很遗憾,一个简单的谷歌搜索无法回答这个问题。此外,我链接到的上一篇文章非常具有误导性,答案是错误的,我也会在那里指出。

于 2011-11-17T01:09:22.583 回答
4

在弹性搜索中可以为索引设置映射。我使用最新版本的 Elastic search 1.7.3 进行了尝试,并且能够成功地将映射设置为索引。

我尝试了以下,

于 2015-11-07T11:43:48.157 回答
-1

我认为 Travis 是对的,也许这个错误来自某些旧版本的 ES,某些旧版本 ES 中的“类型”就像关系数据库中的表,“索引”就像数据库,“文档”就像一张唱片。如今,“类型”似乎消失了。

你可以从这里看到。 在此处输入图像描述

我不知道为什么我不能上传图片。

于 2020-03-24T09:33:05.507 回答