我正在将一些数据索引到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属性以使用不同的搜索分析器,但我真正想要的是搜索此字段时不要触及搜索字词,而不是通过分析器运行。
有没有办法在每个字段的基础上禁用搜索词分析?
答案 0 :(得分:3)
终于在巡航手册时找到了答案。 关键字标记生成器会保留原始术语,除非将其截断为最大缓冲区大小。不需要过滤器。下面的定制分析仪:
'leave_me_alone' => [
'type' => 'custom',
'tokenizer' => 'keyword',
'filter' => [],
],