zoukankan      html  css  js  c++  java
  • 【Elasticsearch】搜索小记之 match VS match_phrase

      最近稍微研究了一下ElasticSearch(下文简称ES),所谓可扩展的开源弹性搜索解决方案,跟同事笑称,如果它作为SQL SERVER的话,我的了解还在基本的select语句上,当然学习它也是一个积累知识的过程,闲言少叙,书归正传,今天简单将里面中的基础的两个查询总结一下,有不对的地方欢迎各位指出。

      刚刚接触ES的时候,发现他的搜索确实很快,不像SQL Server 的like查询,他还能通过解析用户搜索的词汇,通过相关系数(score)都给你查出来,当然SQLServer 也有全文搜索,这个暂且不提。先举个例子:我想搜索 包含“美国哈佛大学”的title。match语句如下:

     1 {
     2   "fields": [
     3     "title"
     4   ],
     5   "query": {
     6     "match": {
     7       "title": "美国哈佛大学"
     8     }
     9   },
    10   "size": 100
    11 }

    返回结果:

    很明显,“美国哈佛大学”六个字,它做了分词:["美国","哈佛","大学"](当然可能更详细),然后得到的结果是2964条,也就是说,包含这几个关键字的有这么多,那么我在换上 match_phrase搜索,语句如下:

     1 {
     2   "fields": [
     3     "title"
     4   ],
     5   "query": {
     6     "match_phrase": {
     7       "title": {
     8         "query": "美国哈佛大学",
     9         "slop": 0
    10       }
    11     }
    12   },
    13   "size": 100
    14 }

    结果:

    看就两条数据。所以,想用什么搜索方式还是看需求吧。

  • 相关阅读:
    ubuntu 无法在终端切换输入法的解决办法
    c代码连接mysql数据库内存泄露的问题
    栈和堆的地址哪个高
    笔试题之union与struct
    笔试题之interface和abstract class之间的区别
    笔试题之C#struct
    c++单例模式的写法
    c++返回引用是否是真的引用
    operator = 为什么要返回*this的应用
    c++ new和delete操作符的重载
  • 原文地址:https://www.cnblogs.com/panzi/p/elasticsearch.html
Copyright © 2011-2022 走看看