美文网首页
ES学习总结

ES学习总结

作者: 大头8086 | 来源:发表于2018-05-06 12:52 被阅读30次

    过滤查询(Filter)和评分查询(Query)性能差异

    过滤查询(Filtering queries)只是简单的检查包含或者排除,这就使得计算起来非常快。考虑到至少有一个过滤查询(filtering query)的结果是 “稀少的”(很少匹配的文档),并且经常使用不评分查询(non-scoring queries),结果会被缓存到内存中以便快速读取,所以有各种各样的手段来优化查询结果。

    相反,评分查询(scoring queries)不仅仅要找出匹配的文档,还要计算每个匹配文档的相关性,计算相关性使得它们比不评分查询费力的多。同时,查询结果并不缓存。

    多亏倒排索引(inverted index),一个简单的评分查询在匹配少量文档时可能与一个涵盖百万文档的filter表现的一样好,甚至会更好。但是在一般情况下,一个filter 会比一个评分的query性能更优异,并且每次都表现的很稳定。

    过滤(filtering)的目标是减少那些需要通过评分查询(scoring queries)进行检查的文档。

    对于精确值的查询,你可能需要使用 filter 语句来取代 query,因为 filter 将会被缓存。

    相关性评分计算

    用 term 查询计算每个文档相关度评分 _score ,这是种将词频(term frequency,即词 quick 在相关文档的 title 字段中出现的频率)和反向文档频率(inverse document frequency,即词 quick 在所有文档的 title 字段中出现的频率),以及字段的长度(即字段越短相关度越高)相结合的计算方式。

    exact value 与full text

    ElasticSearch把值分成两类:exact value 与full text。
    当针对exact value的字段搜索时,使用布尔判断,例如:Foo != foo。
    当针对full text的字段搜索时,则是计算相关程度,例如:UK与United Kingdom相关、jumping与leap也相关。

    相关文章

      网友评论

          本文标题:ES学习总结

          本文链接:https://www.haomeiwen.com/subject/ayzzbxtx.html