03-DSL查询语法-全文检索查询

03-DSL查询语法-全文检索查询

1.全文检索查询

全文检索查询,会对用户输入内容分词,常用于搜索框搜索:

比如有一个旅游网站,有一个搜索框,在里面可以输入酒店的相关信息,酒店的名称也好,酒店的地理位置也好,点击搜索,他就可以帮你去检索出相关的酒店返回给你。或者是去京东买东西,搜索“西门子冰箱”,这时候点击搜索按钮,我们的京东后台就可以把这个数据得到以后,先对这个内容做分词,然后得到西门子和冰箱两个词,然后拿着这两个词,分别取倒排索引库里面进行检索和匹配,得到相关的文档,也就是商品,然后返回给你。这两种场景都可以用于全文检索。

2.全文检索查询

1.match查询:全文检索查询的一种,会对用户输入内容分词,然后去倒排索引库检索,语法:

GET /indexName/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

# match查询

GET /hotel/_search
{
  "query": {
    "match": {
      "all": "上海外滩"
    }
  }
}

FIELD:字段,也就是你要根据哪个字段做查询

TEXT:搜索的内容,比如京东的“西门子冰箱”

2.multi_match:与match查询类似,只不过允许同时查询多个字段,语法:

GET /indexName/_search
{
  "query": {
    "multi_match": {
      "query": "TEXT",
      "fields": ["FIELD1", " FIELD12"]
    }
  }
}

# multi_match查询

GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "外滩如家",
      "fields": ["brand", "name", "business"]
    }
  }
}

会发现这两种效果一样,为什么?

因为上面虽然搜的是all这个字段,但是我们是把brand、name、business这三个字段的值拷贝进去了,既然如此,效果肯定就是一样的了。

但是建议用all这种,因为参与搜索的字段越多,将来查询的效率越低。也就是不要根据多个字段去查,而是把多个字段拷到一个字段里面去。

3.总结:

match和multi_match的区别是什么?

​ match:根据一个字段查询

​ multi_match:根据多个字段查询,参与查询字段越多,查询性能越差

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值