在 Elasticsearch 中的 IP 数据类型上按类型搜索

Search-as-you-type on IP datatype in Elasticsearch

我们目前正在 UI 中为索引中的某些字段添加“键入即搜索”。

对于字符串字段,Elasticsearch 的功能允许通过多种方式来实现,例如通过 match_phrase_prefix 查询已分析的标记或在索引期间通过 ngrams。

然而,由于 IPv4 地址在内部是 stored as long,据我所知,对它们进行通配符或前缀搜索并不容易。

可以使用范围查询来搜索 IP 范围,但我更想让用户输入“118”并显示“168.1.118.32”、“118.43.119.4”和“ 1.1.1.118".

是否有执行此类查询的内置方法?或者我们是否需要将字段单独存储为分析字符串?

经过更多调查后,我们使用 multi field 将 IP 地址存储两次,一次作为正常 IP 类型,第二次作为分析值,我们将 IP 拆分为 4 个八位字节,以便我们可以搜索这些部分separately.

在模板中,我们使用以下模式在写入索引时拆分值:

    "analyzer": {
      "ipv4analyzer": {
        "tokenizer": "ipv4tokenizer"
      }
    },
    "tokenizer": {
      "ipv4tokenizer": {
        "pattern": "([0-9]{1,3})",
        "type": "pattern",
        "group": "1"
      }
    }