索引中的文档可以具有用于预过滤的不同标志,例如INVALID
,PRIVATE
等。每个标志都覆盖文档的不同方面,因此它们彼此之间不相关,即它们实际上是布尔值。
目标:在运行计分查询之前,找到最快的方法来过滤这些文档。
选项:
Boolean Field
字段,以便可以通过true或false过滤它们。Keyword Field
字段,因此,如果该条目具有值或为NULL,则可以通过Exists Query
对其进行过滤。Text Field
字段,以便可以通过常规Match Query
过滤它们谢谢您的建议!
答案 0 :(得分:1)
因此,我对此进行了测试,并得到以下结果:
TL; DR::如果需要一次查询多个标志,请使用布尔字段作为标志。如果您只需要查询一个标志值,则使用任何您喜欢的标志。
索引中的文档:10.000.000
标志字段:
nullFlag
,可能的值:null
或"exists"
,查询:Exists Query
booleanFlag
,可能的值:true
或false
,查询:Term Query
textFlag
,可能的值:VALID
,INVALID
,DUMMY_FLAG1
,DUMMY_FLAG2
或DUMMY_FLAG3
,查询:Match Query
< / li>
注释:
index.queries.cache.enabled: false
禁用。adjust_pure_negative
和boost
。结果:
Exists Query
似乎是最慢的Term Query
过滤布尔值并通过Match Query
检查文本标志似乎没有什么不同,如果,您仅过滤一个标志。Term Query
的布尔值会更快。测试:
查询:
{
"bool" : {
"filter" : [
{
"term" : {
"booleanFlag" : {
"value" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 91ms | 4998613
2 | 45ms | 4998613
3 | 46ms | 4998613
4 | 45ms | 4998613
5 | 45ms | 4998613
查询:
{
"bool" : {
"filter" : [
{
"term" : {
"booleanFlag" : {
"value" : false,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 97ms | 5001387
2 | 45ms | 5001387
3 | 45ms | 5001387
4 | 48ms | 5001387
5 | 45ms | 5001387
查询:
{
"bool" : {
"filter" : [
{
"bool" : {
"must" : [
{
"exists" : {
"field" : "nullFlag",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 99ms | 4999305
2 | 53ms | 4999305
3 | 53ms | 4999305
4 | 53ms | 4999305
5 | 54ms | 4999305
查询:
{
"bool" : {
"filter" : [
{
"bool" : {
"must_not" : [
{
"exists" : {
"field" : "nullFlag",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 145ms | 5000695
2 | 107ms | 5000695
3 | 104ms | 5000695
4 | 104ms | 5000695
5 | 107ms | 5000695
查询:
{
"bool" : {
"filter" : [
{
"match" : {
"textFlag" : {
"query" : "VALID",
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"auto_generate_synonyms_phrase_query" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 87ms | 4998937
2 | 43ms | 4998937
3 | 44ms | 4998937
4 | 43ms | 4998937
5 | 42ms | 4998937
查询:
{
"bool" : {
"filter" : [
{
"match" : {
"textFlag" : {
"query" : "INVALID",
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"auto_generate_synonyms_phrase_query" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 89ms | 5001063
2 | 48ms | 5001063
3 | 43ms | 5001063
4 | 43ms | 5001063
5 | 43ms | 5001063
查询:
{
"bool" : {
"filter" : [
{
"match" : {
"textFlag" : {
"query" : "VALID DUMMY_FLAG1",
"operator" : "OR",
"prefix_length" : 0,
"max_expansions" : 50,
"fuzzy_transpositions" : true,
"lenient" : false,
"zero_terms_query" : "NONE",
"auto_generate_synonyms_phrase_query" : true,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 151ms | 10000000
2 | 105ms | 10000000
3 | 106ms | 10000000
4 | 105ms | 10000000
5 | 107ms | 10000000
查询:
{
"bool" : {
"filter" : [
{
"term" : {
"booleanFlagOne" : {
"value" : true,
"boost" : 1.0
}
}
},
{
"term" : {
"booleanFlagTwo" : {
"value" : false,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 138ms | 2500645
2 | 84ms | 2500645
3 | 84ms | 2500645
4 | 83ms | 2500645
5 | 86ms | 2500645
查询:
{
"bool" : {
"filter" : [
{
"exists" : {
"field" : "nullFlag",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 93ms | 5000779
2 | 42ms | 5000779
3 | 43ms | 5000779
4 | 42ms | 5000779
5 | 44ms | 5000779
查询:
{
"bool" : {
"must" : [
{
"exists" : {
"field" : "nullFlag",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 88ms | 5000779
2 | 43ms | 5000779
3 | 42ms | 5000779
4 | 43ms | 5000779
5 | 42ms | 5000779
查询:
{
"bool" : {
"must_not" : [
{
"exists" : {
"field" : "nullFlag",
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
结果:
Run | Time | Hits
1 | 139ms | 4999221
2 | 96ms | 4999221
3 | 98ms | 4999221
4 | 95ms | 4999221
5 | 94ms | 4999221