当前位置: 首页 > 知识库问答 >
问题:

弹性搜索:用过滤器和constant_score优化查询?

柯乐童
2023-03-14

在Udemy教程中,我在这里遇到了这个查询:

{ "query": { "bool": {
    "must": {"match": {"genre": "Sci-Fi"}},
    "must_not": {"match": {"title": "trek"}},
    "filter:" {"range": {"year": {"gte": 2010, "lt": 2015}}}
}}}

我想知道是否有可能优化它?我在想两种可能的方法:

>

  • 将“流派”放入筛选器上下文中。但是一部电影可能有多种类型,所以我不确定使用type关键字和filter-term是否能在那里工作。

    直接将“must_not”放在过滤器上下文中(没有bool)是行不通的,因为据我所知,过滤器不允许“过滤掉”,只允许“过滤保留什么”。但是如果我将must_not包装在constant_score或filter-bool中,查询的性能会更好吗?还是ES自动处理此类优化?我只是不明白为什么must_not在查询中,而不是在筛选上下文中。难道某些东西只有部分不匹配,从而只将分数降低一个度吗?

  • 共有1个答案

    傅琦
    2023-03-14

    关于1:

    类型匹配移动到过滤器上下文可能会稍微加快它的速度(尽管这取决于许多其他因素),但您将失去排名,这可能对您很重要,也可能不重要。最后,当排名很重要时,使用must,如果排名不重要,则使用filter,您的唯一目标是匹配文档,或者没有给定一些标准。

    此外,使用type关键字只能得到“完全匹配”的语义,这可能是你想要的...或者不是,这取决于您如何创建查询(用户输入或受控选择列表)...

    我要补充的最后一点是,当有人询问性能优化时,我总是补充:过早的优化是万恶之源,所以只有在实际看到性能问题时才做,以前从来没有。

     类似资料:
    • 我正在尝试在Elastic 2中创建一个过滤索引别名。十、 以下是所有青少年的资料,不分性别。我只想在这个过滤器里看到雌性。 这就是我试图创建索引别名的原因: 我看了这个问题,似乎是相同的答案,但是我的JSON一定有问题。 Elasticsearch将范围和术语连接到相同的数组项

    • 我正在使用以下搜索: 我现在想使用弹性搜索在索引过程中提供的id ()来过滤结果。例如,{}。我猜你得用查询这个词。结果应该是只有当< code>_id匹配时,文档才返回。我该怎么做呢?

    • 这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话

    • 不带筛选器的查询: 当我用curl:curl-w'\ntime_total:%{time_total}\n'-h'content-type:application/json'-xget-d‘{}':9200/store/msg/_search?routing=user1来度量这两个查询的性能时 不带筛选器的查询得到的总时间:1.134、1.237、1.107,带筛选器的查询时间:1.322、1.4

    • 如何在elasticsearch中使用与聚合相关的过滤器? 官方文档只给出了过滤器和聚合的小例子,没有对查询dsl进行正式描述——例如,将其与postgres文档进行比较。 通过尝试,我发现以下查询被elasticsearch接受(没有解析错误),但忽略了给定的过滤器: 有些人建议使用查询而不是过滤。但官方文件通常建议对精确值进行过滤。查询的另一个问题是:虽然过滤器提供了和,但查询不提供。 有人能

    • 像 这是我的质疑。这将作为呈现的响应 我的第一次尝试是将should的inside条件作为文本添加到一个节中