Elasticsearch:在特定字段上搜索时不分析

时间:2013-12-18 18:12:02

标签: elasticsearch

我正在将一些数据索引到elasticsearch中,其中一位是IP地址(存储为字符串类型,而不是ip类型)。我正在为IP地址字段使用自定义分析器,其定义如下:

'ipv4_address_analyzer' => [
    'type' => 'custom',
    'tokenizer' => 'ipv4_path_tokenizer',
    'filter' => [],
],

ipv4_path_tokenizer定义如下:

'ipv4_path_tokenizer' => [
    'type' => 'path_hierarchy',
    'delimiter' => '.',
    'buffer_size' => 15,
],

当我在映射中的字段上使用index_analyzer属性时,会使用以下查询对其进行索引和搜索:

{
  "query": {
    "query_string": {
      "query": "95.129",
      "fields": [
        "external_ip",
        "domains",
        "_all"
      ],
      "use_dis_max": true
    }
  },
  "size": 1000
}

然而......搜索词仍由默认搜索分析器处理,这会产生一些误报匹配。

我知道我可以在IP字段上指定search_analyzer属性以使用不同的搜索分析器,但我真正想要的是搜索此字段时不要触及搜索字词,而不是通过分析器运行。

有没有办法在每个字段的基础上禁用搜索词分析?

1 个答案:

答案 0 :(得分:3)

终于在巡航手册时找到了答案。 关键字标记生成器会保留原始术语,除非将其截断为最大缓冲区大小。不需要过滤器。下面的定制分析仪:

'leave_me_alone' => [
    'type' => 'custom',
    'tokenizer' => 'keyword',
    'filter' => [],
],