如何在ElasticSearch中不进行分析?

zvokhttg  于 2023-03-29  发布在  ElasticSearch
关注(0)|答案(4)|浏览(117)

我在ElasticSearch字段中有一个字段,我不想分析它,也就是说,它应该被逐字存储和比较。值将包含字母,数字,空格,破折号,斜杠和其他字符。
如果我没有在这个字段的Map中给予一个分析器,默认情况下仍然使用一个分词器,它会将我的逐字字符串分解成单词块,我不希望这样。
有没有一个超级简单的分析器,基本上,不分析?或者有没有一种不同的方式来表示这个字段不应该被分析?
我只创建索引,不做其他任何事情。我可以使用像“英语”这样的分析器来处理其他字段,这些字段似乎是预配置分析器的内置名称。是否有其他名称的列表?也许有一个符合我的需要(即不对输入做任何事情)。
这是我目前的Map:

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

my_field1是语言相关的;这似乎是可行的。my_field2应该是逐字的。我想在那里给予一个分析器,它根本不做任何事情。
my_field2的样本值为"B45c 14/04"

c0vxltue

c0vxltue1#

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

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

ilmyapht

ilmyapht2#

由于删除了string(由keywordtext取代)类型,如here所述,因此不再是这样。相反,您应该使用keyword类型和"index": true | false
例如:OLD:

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

成为新的:

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

这意味着该字段被索引,但因为它被类型为keyword,所以不会被隐式分析。如果您希望分析该字段,则需要使用text类型。

ubby3x7f

ubby3x7f3#

也可以使用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分析器在默认情况下为整个索引设置时可能很有用。
更新:正如评论中所说,string在5.X中不再支持

oymdgrw7

oymdgrw74#

对于API 8.5,旧的答案不起作用,我偶然发现了解决方案,只需将属性设置为“enabled=false”,查看官方文档,https://www.elastic.co/guide/en/elasticsearch/reference/current/enabled.html内有示例

相关问题