查询和过滤

评分查询:

在Es查询中,Must、Mustnot、Should等查询,在查询过程中,要去判断这个文档是否匹配,同时它还需要判断这个文档匹配的有 _多好_(匹配程度如何)。评分查询(scoring queries)不仅仅要找出 匹配的文档,还要计算每个匹配文档的相关性,计算相关性使得它们比不评分查询费力的多。同时,查询结果并不缓存。

(注:在自定义排序下,并且没有通过script去做_Score的操作,查询时不会计算_score值)

过滤查询:

在Es查询中,Filter,在查询过程中,只需要去判断文档是否匹配,无需计算相关度评分,因此过滤的查询,会比评分查询快的多,并且结果可能会被缓存到内存中以便快速读取。(注:缓存不是绝对的,由近期查询命中次数以及总文档数决定。具体关于缓存,本章不做细写)

如何选择过滤查询还是评分查询:

通常,在做全文检索,并且最后排序通过_score排序时,才选择评分查询,除此以外的情况都使用过滤因为在一般情况下,一个filter 会比一个评分的query性能更优异,并且每次都表现的很稳定。(注:不参与评分的查询条件都放在filter)。

最后附上两种写过滤查询的方法(两种方式在性能上是完全相同的):

1.Bool中的Filter。(实际开发中,应用的更多)

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "range": { "date": { "gte": "2014-01-01" }} 
        }
    }
}

2.constant_score 中的Filter(适合用于你只需要执行一个 filter 而没有其它查询

{
    "constant_score":   {
        "filter": {
            "term": { "category": "ebooks" } 
        }
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Django中,查询过滤是指使用特定条件来筛选数据库中的记录。这可以通过使用查询集(QuerySet)的方法来实现。引用中提到了使用继承的原理进行查询过滤的例子。当你想要创建一个新的记录时,你可以将pk和id都设置为None,然后保存记录。这样,Django会为你自动生成一个新的主键值。例如,你可以使用以下代码来创建一个新的Blog实例并保存它: ```python django_blog = Blog(name='Django', tagline='Django is easy') django_blog.pk = None django_blog.id = None django_blog.save() ``` 在这个例子中,django_blog.pk将会是一个新的主键值。 另外,如果你使用了继承,查询过滤可能会更加复杂。引用提供了一个使用子类进行查询过滤的例子。你可以定义一个子类ThemeBlog继承自Blog,并添加一个额外的字段theme。然后,你可以使用以下代码创建一个ThemeBlog实例并保存它: ```python django_blog = ThemeBlog(name='Django', tagline='Django is easy', theme='python') django_blog.save() ``` 在这个例子中,django_blog.pk将会是一个新的主键值。 需要注意的是,当使用get()方法查询数据库时,如果有多个记录满足查询条件,Django会抛出MultipleObjectsReturned异常。这在引用中有提到。在这种情况下,你可以使用其他查询集的方法来获取满足条件的记录。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Django数据库查询参考及常用过滤方法](https://blog.csdn.net/qq_27664967/article/details/105096404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值