Elasticsearch(12) match_bool_prefix的使用

elasticsearch version: 7.10.1

match_bool_prefix 是 Elasticsearch 中用于执行布尔前缀查询的一种查询类型。这种查询类型特别适用于当你想要匹配一个字段的前缀,并且希望这个字段中的词语是按照一定顺序出现的场景。

match_bool_prefix 语法

{  
  "query": {  
    "match_bool_prefix": {  
      "field_name": {  
        "query": "your_query_string",  
        "max_expansions": <number_of_expansions>,  
        "lenient": <true_or_false>  
      }  
    }  
  }  
}
  • field_name 是你想要执行查询的字段名。
  • query 是你想要匹配的前缀字符串。
  • max_expansions 是一个可选参数,用于限制查询可以扩展到的最大术语数。这有助于控制查询的复杂性和性能。如果不指定,则默认为 50。
  • lenient 是一个可选参数,如果设置为 true,则格式错误的字段将被忽略。默认为 false。

match_bool_prefix例题

场景1

假设我们有一个电商应用,用户需要搜索产品名称,我们希望支持前缀查询并控制最大扩展数量

索引创建

PUT /products
{
  "mappings": {
    "properties": {
      "product_name": {
        "type": "text",
        "analyzer": "standard"
      }
    }
  }
}

文档插入

POST /products/_doc
{
  "product_name": "Apple iPhone 12 Pro Max"
}

POST /products/_doc
{
  "product_name": "Samsung Galaxy S21 Ultra"
}

POST /products/_doc
{
  "product_name": "Google Pixel 5"
}

POST /products/_doc
{
  "product_name": "OnePlus 9 Pro"
}

查询语句

GET /products/_search
{
  "query": {
    "match_bool_prefix": {
      "product_name": {
        "query": "iPhone",
        "max_expansions": 3
      }
    }
  }
}

场景2(max_expansions 使用)

max_expansions 参数在Elasticsearch的模糊匹配查询中,如 match_phrase_prefix 或 match_bool_prefix 等查询类型中使用,用于限制前缀查询时生成的可能候选项的数量。下面是一个具体的示例
假设我们有一个索引 library_books,其中包含书籍标题字段 title,并且用户想要搜索所有以 “机器学习” 开头的书籍,但您希望限制可能的结果数量以避免过多的资源消耗。

索引创建

PUT /library_books
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "standard"
      }
    }
  }
}

文档插入

POST /library_books/_doc/
{
  "title": "机器学习实战"
}

POST /library_books/_doc/
{
  "title": "机器学习原理与应用"
}

POST /library_books/_doc/
{
  "title": "深度学习与机器学习"
}

POST /library_books/_doc/
{
  "title": "Python机器学习指南"
}

POST /library_books/_doc/
{
  "title": "机器智能"
}

查询语句

GET /library_books/_search
{
  "query": {
    "match_phrase_prefix": {
      "title": {
        "query": "机器学习",
        "max_expansions": 2
      }
    }
  }
}

在这个例子中,尽管实际文档中有多本标题包含“机器学习”或以此为前缀的书籍,但由于设置了 max_expansions 为2,Elasticsearch只会查找最多包含两个额外词项的匹配项(例如:“机器学习实战” 和 “机器学习原理与应用”)。如果实际的文档库中有更多以 “机器学习” 前缀开始的不同书名,max_expansions 将会限制返回结果的数量至设定的最大扩展数以内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值