在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:
将类型
匹配移动到过滤器上下文可能会稍微加快它的速度(尽管这取决于许多其他因素),但您将失去排名,这可能对您很重要,也可能不重要。最后,当排名很重要时,使用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条件作为文本添加到一个节中