elasticsearch中有优先级过滤器吗?

时间:2014-09-01 15:31:38

标签: elasticsearch

我想知道是否有过滤器会过滤某些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,它应该返回第一个,第三个文档没有第二个文档。

因此文档应该是最匹配的字段而不是所有字段。

2 个答案:

答案 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,它应该先返回第三个   没有第二份文件的文件。

这是一个错字吗?由于第三个文档的sizexx,我不明白为什么xl可以找到第三个文档。

如果是这样,我认为使用AND运算符的常规查询字符串查询可能适合您,例如

{ "query":{"query_string": {"query": "blue xl sports", "default_operator": "AND"}}}

您还可以将所有三个条件放入must查询的bool子句中。我认为它也可以完成这项工作。