48

我在 ElasticSearch 字段中有一个字段,我不想对其进行分析,即应该逐字存储和比较它。这些值将包含字母、数字、空格、破折号、斜线和可能的其他字符。

如果我没有在我的映射中为这个字段提供分析器,默认值仍然使用分词器,它将我的逐字字符串破解成词块。我不想要那个。

有没有一个超级简单的分析器,基本上不分析?或者是否有不同的方式表示不应分析该字段?

我只创建索引,我不做任何其他事情。我可以将“english”之类的分析器用于其他字段,这些字段似乎是预配置分析器的内置名称。有其他名字的列表吗?也许有一个适合我的需求(即对输入什么都不做)。

这是我目前的映射:

{
  "my_type": {
    "properties": {
      "my_field1": { "type": "string", "analyzer": "english" },
      "my_field2": { "type": "string" }
    }
  }
}

my_field1依赖于语言;这似乎有效。 my_field2应逐字逐句。我想在那里提供一个分析器,它根本不做任何事情。

my_field2的样本值为"B45c 14/04"

4

3 回答 3

58
"my_field2": {
    "properties": {
        "title": {
            "type": "string",
            "index": "not_analyzed"
        }
    }
}

在这里检查你,https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-core-types.html,了解更多信息。

于 2013-08-14T16:59:18.713 回答
49

string由于删除了(替换为keywordand text)类型,如此处所述,不再适用。相反,您应该使用keywordtype with "index": true | false

例如旧:

{
  "foo": {
    "type" "string",
    "index": "not_analyzed"
  }
}

变成新的:

{
  "foo": {
    "type" "keyword",
    "index": true
  }
}

这意味着该字段已编入索引,但由于它的类型为keyword未隐式分析。如果您想对字段进行分析,则需要使用texttype。

于 2018-02-13T17:49:37.187 回答
3

keyword也可以使用分析仪。

// don't actually use this, use "index": "not_analyzed" instead
{
  "my_type": {
    "properties": {
      "my_field1": { "type": "string", "analyzer": "english" },
      "my_field2": { "type": "string", "analyzer": "keyword" }
    }
  }
}

如此处所述:https ://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.html ,将这些字段标记为not_analyzed.

但是keyword,当它默认设置为整个索引时,分析器会很有用。

更新:正如评论中所说,string5.X 不再支持

于 2015-08-07T14:21:57.117 回答