如何在ElasticSearch中不进行分析?

时间:2013-08-14 15:31:34

标签: elasticsearch token analyzer verbatim

我在ElasticSearch字段中有一个字段,我不想分析,i。即它应该存储并逐字比较。这些值将包含字母,数字,空格,短划线,斜线和其他字符。

如果我没有在我的映射中为此字段提供分析器,则默认仍然使用一个标记生成器,它将我的逐字字符串破解成单词块。我不希望这样。

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

我只创建索引,我不做任何其他事情。我可以将“英语”等分析器用于其他字段,这些字段似乎是预配置分析器的内置名称。有其他名字的清单吗?也许有一个符合我的需求(即对输入无动于衷)。

这是我目前的映射:

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

my_field1依赖于语言;这似乎有效。 my_field2应逐字逐句。我想在那里给一个分析器什么都不做。

my_field2的示例值为"B45c 14/04"

3 个答案:

答案 0 :(得分:50)

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

点击此处https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-core-types.html,了解更多信息。

答案 1 :(得分:28)

由于删除了string(由keyword和``替换为here所描述的类型,因此不再适用。相反,您应该使用"index": true | false。 例如OLD:

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

变为新:

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

这意味着该字段已编入索引,但因为它被键入为keyword而未进行隐式分析。

答案 2 :(得分: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分析器在默认情况下为整个索引设置时非常有用。

更新:正如评论中所述,5.X

不再支持string