我是使用弹性搜索的新手,我也从未使用过Lucene。
我构建了这个查询:
{
"query" : {
"wildcard" : { "referer" : "*.domain.com*" }
},
"filter" : {
"query" : {
"term" : { "first" : "1" }
}
},
"facets" : {
"site_id" : {
"terms" : {
"field" : "site",
"size" : "70"
}
}
}
}
通配符工作得很好,但是术语过滤器被忽略了,我做错了什么?
我需要使用通配符和术语
过滤结果谢谢!
答案 0 :(得分:2)
假设您要做的是在通配符查询结果上应用过滤器, 你可以使用FilteredQuery。但是,您的情况可能更适合过滤器。
您使用查询过滤器。您可以直接在FilteredQuery中使用TermFilter,而不是使用TermQuery过滤器。 TermFilter应该更快,因为它直接使用TermsEnum。
请注意,过滤器的结果会缓存在FilterCache中,过滤器会更快,因为它们不会对文档进行任何评分。在您的情况下,即使FilteredQuery的过滤器部分可以快速工作,但通配符查询将不必要地进行评分。您可以尝试使用AND Filter来同时使用queryfilter(通配符查询)和术语过滤器,而不是FilteredQuery。
要使过滤器按照您的要求工作,请尝试以下操作。 (没试过自己)
{
"filtered" : {
"query" : {
"wildcard" : { "referer" : "*.domain.com*" }
},
"filter" : {
"term" : { "first" : "1" }
}
},
"facets" : {
"site_id" : {
"terms" : {
"field" : "site",
"size" : "70"
}
}
}
}