zoukankan      html  css  js  c++  java
  • elasticSearch(六)--全文搜索

    数据案例

      

    1、匹配查询

      a、单词查询

        

      执行match步骤:

      ·检查field类型:title字段为(analyzed)字符串,所以搜索时,title需要被分析。

      ·分析查询字符串:QUICK! 经过标准分析器分后为quick

      ·找到匹配文档:再倒排索引中找到quick,并返回包含该词的文档(1,2,3)

      ·为每个文档打分:查询综合考虑词频( 每篇文档 title 字段包含 quick 的次数) 、 逆文档频率( 在全部文档中 title 字段包含 quick 的次数) 、

              包含 quick 的字段长度( 长度越短越相关) 来计算每篇文档的相关性得分 _score  

       b、多词查询

        

        

        <1> 文档4的相关度最高, 因为包含两个"brown"和一个"dog"

        <2> 文档23都包含一个"brown"和一个"dog", 且'title'字段长度相同, 所以相关度相等。

        <3> 文档1只包含一个"brown", 不包含"dog", 所以相关度最低。
        因为 match 查询需要查询两个关键词: "brown" "dog" , 在内部会执行两个 term 查询并
        综合二者的结果得到最终的结果。 match 的实现方式是将两个 term 查询放入一个 bool 查询, bool 查询在之前的章节已经介绍过。
        重要的一点是, 'title' 字段包含至少一个查询关键字的文档都被认为是符合查询条件的。匹配的单词数越多, 文档的相关度越高。

         提高精度

        默认匹配结果为或的关系,如brown dog 搜索结果为包含brown或者dog的文档

        match查询接受operator参数提高精度。默认operator=or

        

         match 查询有 'minimum_should_match' 参数, 参数值表示被视为相关的文档必须匹配的关键词个数。 参数值可以设为整数, 也可以设置为百分数。

        因为不能提前确定用户输入的查询关键词个数, 使用百分数也很合理

        

    2、组合查询 

      

       计算得分

         把所有符合 must should 的子句得分加起来, 然后除以 must should 子句的总数为每个文档计算相关性得分。
        must_not 子句并不影响得分; 他们存在的意义是排除已经被包含的文档。

       精度控制

        所有的 must 子句必须匹配, 并且所有的 must_not 子句必须不匹配, 但是多少 should 子句应该匹配呢? 默认的, 不需要匹配任何 should 子句,

        一种情况例外: 如果没有 must 子句,就必须至少匹配一个 should 子句。像我们控制 match 查询的精度一样,

        我们也可以通过 minimum_should_match 参数控制多少 should 子句需要被匹配, 这个参数可以是正整数, 也可以是百分比。

        

        结果集仅包含 title 字段中有 "brown" "fox" , "brown" "dog" , "fox" "dog" 的文档。 如果一个文档包含上述三个条件, 那么它的相关性就会比其他仅包含三者中的两个条件的文档要高

     

  • 相关阅读:
    chapter02“良/恶性乳腺癌肿瘤预测”的问题
    ASCII编码和Unicode编码的区别
    Spring AOP概述
    Spring 基于注解的配置
    Spring Bean作用域&FactoryBean
    Spring <bean> 之间的关系&整合多个配置文件
    Spring 方法注入
    Spring 简化装配Bean的配置方式
    Spring 注入参数详解
    vue-router 导航守卫
  • 原文地址:https://www.cnblogs.com/guanhao0114/p/14659004.html
Copyright © 2011-2022 走看看