zoukankan      html  css  js  c++  java
  • Elasticsearch学习之深入搜索二 --- 搜索底层原理剖析

    1. 普通match如何转换为term+should

    {
      "match": { "title": "java elasticsearch"}
    }

    使用诸如上面的match query进行多值搜索的时候,es会在底层自动将这个match query转换为bool的语法,bool should,指定多个搜索词,同时使用term query

    {
      "bool": {
        "should": [
          { "term": { "title": "java" }},
          { "term": { "title": "elasticsearch"   }}
        ]
      }
    }

    2. and match如何转换为term+must

    {
        "match": {
            "title": {
                "query":    "java elasticsearch",
                "operator": "and"
            }
        }
    }
    
    {
      "bool": {
        "must": [
          { "term": { "title": "java" }},
          { "term": { "title": "elasticsearch"   }}
        ]
      }
    }

    3. minimum_should_match如何转换

    {
        "match": {
            "title": {
                "query":                "java elasticsearch hadoop spark",
                "minimum_should_match": "75%"
            }
        }
    }
    
    {
      "bool": {
        "should": [
          { "term": { "title": "java" }},
          { "term": { "title": "elasticsearch"   }},
          { "term": { "title": "hadoop" }},
          { "term": { "title": "spark" }}
        ],
        "minimum_should_match": 3 
      }
    }

    match query --> bool + term

    4. 权重控制

      搜索标题中包含java的帖子,同时呢,如果标题中包含hadoop或elasticsearch就优先搜索出来,同时呢,如果一个帖子包含java hadoop,一个帖子包含java elasticsearch,包含hadoop的帖子要比elasticsearch优先搜索出来

      搜索条件的权重,boost,可以将某个搜索条件的权重加大,此时当匹配这个搜索条件和匹配另一个搜索条件的document计算relevance score时,匹配权重更大的搜索条件的document,relevance score会更高,当然也就会优先被返回回来,默认情况下,搜索条件的权重都是一样的,都是1

    GET /forum/article/_search 
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "title": "blog"
              }
            }
          ],
          "should": [
            {
              "match": {
                "title": {
                  "query": "java"
                }
              }
            },
            {
              "match": {
                "title": {
                  "query": "hadoop"
                }
              }
            },
            {
              "match": {
                "title": {
                  "query": "elasticsearch"
                }
              }
            },
            {
              "match": {
                "title": {
                  "query": "spark",
                  "boost": 5
                }
              }
            }
          ]
        }
      }
    }
  • 相关阅读:
    【Beta阶段】第一次Scrum Meeting
    【Beta阶段】第二次Scrum Meeting
    【Beta阶段】第三次Scrum Meeting
    [BUAA软工]Alpha阶段事后分析
    [BUAA软工]Alpha阶段测试报告
    [北航软工]团队贡献分规则
    Windows Server 2008 R2之二从介质安装 AD DS
    Windows Server 2008 R2之一活动目录服务部署
    DC84问
    获取命令行指定参数
  • 原文地址:https://www.cnblogs.com/sunfie/p/7102360.html
Copyright © 2011-2022 走看看