我想知道是否有过滤器会过滤某些no字段可能为4,如果所有4都不匹配则过滤掉接下来的三个字段(如果所有3个字段不匹配则匹配其他2个字段。)
最后,我想要匹配4个字段的文档,如果所有4个字段都不匹配,则匹配3个字段的文档。
通过我运行的查询,只要存在字段匹配,我就可以获得所有文档。
我的文档结构如下
{
colors: [
'blue'
],
brands: 'nike',
size: [
'xl'
],
features: [
'sports'
]
},
{
colors: [
'red'
],
brands: 'adidas',
size: [
'xxl'
],
features: [
'sports'
]
},
{
colors: [
'green'
],
brands: 'adidas',
size: [
'xx'
],
features: [
'sports'
]
}
因此,如果我搜索搜索字词" blue xl sports" ,则应该返回仅包含所有三个匹配项的第一个文档。现在,如果有xl sports,它应该返回第一个,第三个文档没有第二个文档。
因此文档应该是最匹配的字段而不是所有字段。
答案 0 :(得分:0)
只要你像往常一样搜索确切的术语,bool查询应该可以解决这个问题:
{
"bool" : {
"must" : { },
"should" : [
{ "match" : { "colors" : "blue" } },
{ "match" : { "brands" : "nike" } },
{ "match" : { "size" : "xxl" } },
{ "match" : { "features" : "sports" } },
],
"minimum_should_match" : 1
}
}
弹性搜索的默认排序是得分,您将首先获得与4个字段匹配的项目。如果你没有,你将获得仅匹配3个字段的那些,依此类推。
希望这有帮助。
答案 1 :(得分:0)
从你说的话:
因此,如果我运行搜索词“blue xl sports”,它应该返回 只有第一份文件才有三场比赛。
我认为这只是and
运算符的常规查询。但关于下一段,你说:
现在如果有xl sports,它应该先返回第三个 没有第二份文件的文件。
这是一个错字吗?由于第三个文档的size
为xx
,我不明白为什么xl
可以找到第三个文档。
如果是这样,我认为使用AND
运算符的常规查询字符串查询可能适合您,例如
{ "query":{"query_string": {"query": "blue xl sports", "default_operator": "AND"}}}
您还可以将所有三个条件放入must
查询的bool
子句中。我认为它也可以完成这项工作。