2013-12-18 73 views
1

我將一些數據編入elasticsearch,其中一位是IP地址(存儲爲字符串類型,而不是ip類型)。我使用的是自定義的分析儀,其被定義爲IP地址字段如下:Elasticsearch:在特定字段上搜索時不進行分析

'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 
} 

但是...搜索項目仍由默認搜索肛門處理yser,這會產生一些誤報。

我知道我可以在IP字段上指定一個search_analyzer屬性來使用不同的搜索分析器,但是我真正想要的是在搜索此字段而不是通過分析器運行時保持搜索項不變。

有沒有辦法在每個字段的基礎上禁用搜索項分析?

+0

你可以舉一個假陽性匹配的例子嗎?我不明白你的意思是保持搜索詞不變。也許多領域會有幫助?或者把IP放在術語過濾器中而不是查詢字符串中? – kielni

+0

謝謝@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。實質上,我不想在搜索該字段時分析搜索詞。 –

回答

3

終於找到了巡航手冊時的答案。 關鍵字標記化器將原始術語保留爲圓整,除了將其截斷爲最大緩衝區大小。不需要過濾器。下面的定製分析儀:

'leave_me_alone' => [ 
    'type' => 'custom', 
    'tokenizer' => 'keyword', 
    'filter' => [], 
], 
相關問題