美文网首页
【elasticsearch】13、结构化搜索

【elasticsearch】13、结构化搜索

作者: cutieagain | 来源:发表于2020-03-14 19:47 被阅读0次

结构化数据

  • 结构化搜索(structured search)是指对结构化数据的搜索
    • 日期,布尔类型和数字都是结构化的
  • 文本也可以是结构化的
    • 如彩色笔可以有离散的集合:红,绿,蓝
    • 一个博客可能被标记了标签,例如,分布式 distributed,搜索search
    • 电商网站上的商品都有UPCs(universal product codes)或者其他的唯一标识,它们都需要遵从严格规定的,结构化的格式

ex中的结构化搜索

  • buer,时间,日期和数字这类结构化数据:有精确的格式,我们可以对这些格式进行逻辑操作。包括比较数字或者时间的范围,或者判定两个值的大小
  • 结构化的文本可做精确匹配或者部分匹配
    • term查询/prefix前缀查询
  • 结构化结果只有“是”或“否 ”两个值
    • 根据场景需要,而已决定结构化搜索是否需要打分

日期range

  • date math expressions
    • 2020-01-01 00:00:))||+1M
字母 时间
y
M
w
d
H/h 小时
m 分钟
s
image.png

包含不是相等

  • 解决方案:增加一个genre_count字段进行计数。会在组合 bool
    query 给出解决方法
image.png
image.png

回顾

  • 结构化数据 & 结构化搜索
    • 如果不需要算分,可以通过constant score,将查询转为filtering
  • 范围查询和date math
  • 使用exist查询处理非空null值
  • 精确值&多值字段的精确查找
    • term查询是包含,不是完全相等,针对多值字段查询尤其要注意
#结构化搜索,精确匹配
DELETE products
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }

GET products/_mapping



#对布尔值 match 查询,有算分
POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "term": {
      "avaliable": true
    }
  }
}



#对布尔值,通过constant score 转成 filtering,没有算分
POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "avaliable": true
        }
      }
    }
  }
}


#数字类型 Term
POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "term": {
      "price": 30
    }
  }
}

#数字类型 terms
POST products/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "terms": {
          "price": [
            "20",
            "30"
          ]
        }
      }
    }
  }
}

#数字 Range 查询
GET products/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "range" : {
                    "price" : {
                        "gte" : 20,
                        "lte"  : 30
                    }
                }
            }
        }
    }
}


# 日期 range
POST products/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "range" : {
                    "date" : {
                      "gte" : "now-1y"
                    }
                }
            }
        }
    }
}



#exists查询
POST products/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "exists": {
          "field": "date"
        }
      }
    }
  }
}

#处理多值字段
POST /movies/_bulk
{ "index": { "_id": 1 }}
{ "title" : "Father of the Bridge Part II","year":1995, "genre":"Comedy"}
{ "index": { "_id": 2 }}
{ "title" : "Dave","year":1993,"genre":["Comedy","Romance"] }


#处理多值字段,term 查询是包含,而不是等于
POST movies/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "genre.keyword": "Comedy"
        }
      }
    }
  }
}


#字符类型 terms
POST products/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "terms": {
          "productID.keyword": [
            "QQPX-R-3956-#aD8",
            "JODL-X-1937-#pV7"
          ]
        }
      }
    }
  }
}



POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "match": {
      "price": 30
    }
  }
}


POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "term": {
      "date": "2019-01-01"
    }
  }
}

POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "match": {
      "date": "2019-01-01"
    }
  }
}




POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "productID.keyword": "XHDK-A-1293-#fJ3"
        }
      }
    }
  }
}

POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "term": {
      "productID.keyword": "XHDK-A-1293-#fJ3"
    }
  }
}

#对布尔数值
POST products/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "avaliable": "false"
        }
      }
    }
  }
}

POST products/_search
{
  "query": {
    "term": {
      "avaliable": {
        "value": "false"
      }
    }
  }
}

POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "term": {
      "price": {
        "value": "20"
      }
    }
  }
}

POST products/_search
{
  "profile": "true",
  "explain": true,
  "query": {
    "match": {
      "price": "20"
    }
    }
  }
}


POST products/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must_not": {
            "exists": {
              "field": "date"
            }
          }
        }
      }
    }
  }
}

相关文章

  • 【elasticsearch】13、结构化搜索

    结构化数据 结构化搜索(structured search)是指对结构化数据的搜索日期,布尔类型和数字都是结构化的...

  • Elasticsearch - 结构化搜索

    注:此文档仅适用于 Elasticsearch > 5.0 版本 Elasticsearch 的功能之一就是搜索,...

  • ElasticSearch - 结构化搜索

    结构化数据 结构化搜索是指对结构化数据的搜索日期,布尔类型和数字都是结构化的 文本也可以是结构化的。比如笔的颜色:...

  • ES简介

    Elasticsearch概述 分布式搜索、分析引擎 提供实时检索、分析各种类型的数据(结构化、非结构化文本;数字...

  • Elasticsearch 结构化搜索、keyword、Term

    前言 Elasticsearch 中的结构化搜索,即面向数值、日期、时间、布尔等类型数据的搜索,这些数据类型格式精...

  • elasticsearch 深入搜索-结构化搜索

    精确值查找 term 查询数字 我们首先来看最为常用的 term 查询, 可以用它处理数字(numbers)、布尔...

  • Elasticsearch - 聚合

    注:此文档仅适用于 Elasticsearch > 5.0 版本 通过结构化搜索和全文搜索,如果我们有一个查询并且...

  • Elasticsearch入门笔记

    Elasticsearch 全文搜索,结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。如何给数据...

  • ElasticSearch入门

    Elasticsearch是一个实时分布式搜索和分析引擎。它用于全文搜索、结构化搜索、分析以及将这三者混合使用。 ...

  • docker安装elasticsearch

    elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化...

网友评论

      本文标题:【elasticsearch】13、结构化搜索

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