我只使用kibana搜索ElasticSearch,我有几个字段只能取几个值(最坏的情况是,servername,30个不同的值)。
我确实理解了分析对更大、更复杂的字段like this的作用,但是对于那些小而简单的字段,我无法理解分析/非分析字段的优缺点。
那么,在“有限值集”字段中使用Analysisandnot_analyzed有什么好处(例如。服务器名: server0-9*,没有特殊字符要中断)?我在基巴纳会失去什么样的搜索类型?我会获得任何搜索速度或磁盘空间吗?
在其中一次测试中,我发现字段的.raw版本现在是空的,但是kibana仍然将字段标记为已分析的字段,因此我发现我的测试没有定论。
发布于 2016-05-30 22:22:30
我会尽量保持简单,如果你需要更多的澄清,就让我知道,我会详细说明一个更好的答案。
“分析”字段将使用您在映射中为特定表定义的分析器创建一个令牌。如果您使用的是默认分析器(因为您指的是没有特殊字符的东西,那么让我们假设server1-9)使用默认分析器(alnum-小写单词-braker(这不是它所做的基本名称)将标记:
this -> HelloWorld123
into -> token1:helloworld123
OR
this -> Hello World 123
into -> token1:hello && token2:world && token3:123在本例中,如果您执行搜索: HeLlO,它将成为-> "hello“,并且它将匹配此文档,因为标记"hello”就在那里。
对于not_analized字段,它根本不应用任何令牌程序,您的令牌是您的关键字,因此可以这样说:
this -> Hello World 123
into -> token1:(Hello World 123)如果您在该字段中搜索"hello world 123“
不匹配,因为“区分大小写”(您仍然可以使用通配符(Hello*),让我们在另一个时间解决这个问题)。
简而言之:
对要搜索的字段使用“分析”字段,并希望elasticsearch对其进行评分。例如:包含“作业”一词的标题。查询:“标题:作业”。
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获取所有日志。
查询:“server:server 123”。
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 ->与字段或使用通配符完全匹配。
致以敬意,
丹尼尔
https://stackoverflow.com/questions/37532648
复制相似问题