我的数据仅包含关键字或数字。没有全文字段。 我的搜索查询应该支持:完全匹配并包含查询。
我的问题是:如果我不关心分数,并且总是一个 YES 或 NO 的问题,我是否可以始终使用 Filter bool 查询而不是 Must bool 查询来创建 AND 条件以提高性能?
例如:
query = ( myId=12345 AND sream="aaa" AND 名称包含“ABC”)
GET indexName/_search
{
"query":
{
"bool":
{
"filter":
[
{
"term": {
"myId": {
"value": "12345",
"boost": 1
}
}
},
{
"term": {
"stream": {
"value": "aaa",
"boost": 1
}
}
},
{
"wildcard" : {
"name" : {
"wildcard" : "*abc*",
"boost" : 1.0
}
}
}
]
}
},
"sort" : [
{"_instance" : {"order" : "asc"}}
]
}
是的,你成功了!如果您只对精确搜索感兴趣,则不会进行任何全文搜索,因此对评分不感兴趣,
bool/filter
就是正确的选择!!
但请注意,带有前导通配符的
wildcard
查询会降低性能。根据您运行此查询的数据量,过滤器与必须在某种程度上可能根本没有区别。您应该考虑采取不同的做法。