我只使用kibana搜索ElasticSearch,我有几个字段只能取几个值(最坏情况,服务器名称,30个不同的值)。
我确实理解分析对更大,更复杂的字段like this做了什么,但是小而简单的我无法理解anaylyzed / not_analyzed字段的先行/劣势。
那么对于一组有限的价值观使用已分析和未分析的好处是什么?字段(例如.servername:server [0-9] *,没有要打破的特殊字符)?我会在kibana中失去什么样的搜索类型?我会获得任何搜索速度或磁盘空间吗?
在其中一个测试中我看到该字段的.raw版本现在为空,但是kibana仍然按照分析标记该字段,因此我发现我的测试没有结果。
答案 0 :(得分:20)
我会尽量保持简单,如果你需要更多的澄清,请告诉我,我会详细说明。
"分析" field将使用您为映射中的特定表定义的分析器创建令牌。如果您正在使用默认分析器(因为您指的是没有特殊字符的东西,比如服务器[1-9])使用默认分析器(alnum-lowercase word-braker(这不是它基本上就是它的名称))是要标记化:
this -> HelloWorld123
into -> token1:helloworld123
OR
this -> Hello World 123
into -> token1:hello && token2:world && token3:123
在这种情况下,如果你进行搜索:HeLlO它将成为 - > "你好"并且它将匹配此文档,因为令牌"你好"在那里。
对于not_analized字段,它根本不应用任何标记器,您的标记是您的关键字,所以说:
this -> Hello World 123
into -> token1:(Hello World 123)
如果您在" hello world 123"
中搜索该字段不会匹配,因为"区分大小写" (你仍然可以使用通配符(Hello *),让我们在另一个时间内解决)。
简而言之:使用"分析"您要搜索的字段的字段,并且您希望elasticsearch对其进行评分。示例:包含单词" jobs"的标题。查询:"标题:作业"
doc1 : title:developer jobs in montreal
doc2 : title:java coder jobs in vancuver
doc3 : title:unix designer jobs in toronto
doc4 : title:database manager vacancies in montreal
这将检索title1 title2 title3。
在这种情况下"分析"田野就是你想要的。
如果您事先知道该字段上的数据类型,并且您将准确查询您想要的内容,那么" not_analyzed"是你想要的。
示例:
从server123获取所有日志。
查询:"服务器:server123"
doc1 :server:server123,log:randomstring,date:01-jan
doc2 :server:server986,log:randomstring,date:01-jan
doc3 :server:server777,log:randomstring,date:01-jan
doc4 :server:server666,log:randomstring,date:01-jan
doc5 :server:server123,log:randomstring,date:02-jan
仅来自server1和server5。
我希望你明白这一点。正如我所说,保持简单是关于你需要的。
分析 - >磁盘空间更多(如果分析结果很大,则更多)。分析 - >更多时间进行索引。分析 - >更适合匹配文档。
not_analyzed - >磁盘上的空间更少。 not_analyzed - >索引的时间减少了。 not_analyzed - >字段的完全匹配或使用通配符。
此致
丹尼尔