【发布时间】:2014-01-07 01:25:27
【问题描述】:
我正在将一些数据索引到 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 属性以使用不同的搜索分析器,但我真正想要的是在搜索此字段时保持搜索词不变,而不是通过分析器运行。
有没有办法在每个字段的基础上禁用搜索词分析?
【问题讨论】:
-
你能举一个误报匹配的例子吗?我不明白您保持搜索字词不变是什么意思。也许多领域会有所帮助?还是将 IP 放入术语过滤器而不是查询字符串?
-
谢谢@kielni。如果在“.”上分析和标记搜索词然后 12.34.56.78 被标记为(除其他外)12、34、56、78。因此,它与 IP 56.78.90.12 匹配,因为它被 path_hierarchy 标记为 56、56.78、56.78.90 和 56.78.90.12。本质上,我不想在搜索该字段时分析搜索词。
标签: elasticsearch