如何在ElasticSearch中不进行分析?

Alf*_*lfe 44 token analyzer verbatim elasticsearch

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

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

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

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

这是我目前的映射:

{
  "my_type": {
    "properties": {
      "my_field1": { "type": "string", "analyzer": "english" },
      "my_field2": { "type": "string" }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

my_field2将是一个样本值"B45c 14/04".

Sco*_*ice 53

"my_field2": {
    "properties": {
        "title": {
            "type": "string",
            "index": "not_analyzed"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,在此处查看https://www.elastic.co/guide/en/elasticsearch/reference/1.4/mapping-core-types.html.

  • 我们可以全局设置它,它不会分析所有的字符串类型吗? (2认同)

van*_*ome 34

这不再是正确的,由于去除string(通过置换keyword和``)类型描述这里.相反,你应该使用"index": true | false.例如OLD:

{
  "foo": {
    "type" "string",
    "index": "not_analyzed"
  }
}
Run Code Online (Sandbox Code Playgroud)

变得新:

{
  "foo": {
    "type" "keyword",
    "index": true
  }
}
Run Code Online (Sandbox Code Playgroud)

这意味着该字段已编制索引,但因为它是键入的,因此keyword未进行隐式分析.