【问题标题】:How to not-analyze in ElasticSearch?如何在 ElasticSearch 中不进行分析?
【发布时间】:2013-08-16 15:46:27
【问题描述】:

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

如果我没有在我的映射中为该字段提供分析器,默认情况下仍使用分词器,它将我的逐字字符串破解成词块。我不想那样。

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

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

这是我目前的映射:

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

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

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

【问题讨论】:

    标签: elasticsearch token analyzer verbatim


    【解决方案1】:

    由于删除了string(由keywordtext 替换)类型,如here 所述,这不再适用。相反,您应该使用keyword 类型和"index": true | false

    例如OLD:

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

    成为新的:

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

    这意味着该字段已编入索引,但由于它被键入为keyword,因此不会被隐式分析。如果要分析字段,需要使用text 类型。

    【讨论】:

    【解决方案2】:

    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 分析器在默认设置为整个索引时会很有用。

    更新:正如 cmets 中所说,string 在 5.X 中不再支持

    【讨论】:

    • 实际上,keyword 分析器确实分析了该字段,但整体上只分析了一次。在某些大型文本字段(如 ~MB 内容)上设置它可能不理想 - 它会进入索引并占用一些资源。
    • 此外,在 5.x 中创建的索引不支持 string 字段,而支持 textkeyword 字段。
    【解决方案3】:
    "my_field2": {
        "properties": {
            "title": {
                "type": "string",
                "index": "not_analyzed"
            }
        }
    }
    

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

    【讨论】:

    • 啊!这就是我一直在寻找的。我多次偶然发现not_analyzed,但一直认为使用它意味着根本无法搜索它(显然这就是no 的用途)。文档的链接很有启发性,谢谢! (如果有时间我会接受这个答案,除非出现更有帮助的东西。)
    • @Alfe,您可以在this answer for more info 获得,包括选项index: no
    • 我们可以全局设置它,它不会分析所有字符串类型吗?
    • 默认情况下,如果我们不添加 'index': 'not_analyzed' 会发生什么?有默认分析器吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多