term和match是在ElasticSearch使用过程中,查询使用场景最多的查询方式,但两者之间存在一定的差异。
term和match的区别
- term:代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词解析,直接对搜索词进行查找;
- match:代表模糊匹配,搜索前会对搜索词进行分词解析,然后按搜索词匹配查找;
term精确匹配
不使用分析器:term 查询不会应用字段的分析器,它直接在倒排索引中查找准确的术语。
term 查询是直接通过倒排索引指定的词条进行查找的,所以,很显然,term查询效率肯定比match要高。
term 属于精确匹配,只能查单个词。
如果我们想通过 term 匹配多个词的话,可以使用 terms 来实现:
因为 terms 里的[ ] 多个搜索词之间是or(或者)关系,只要满足其中一个词即可。
如果我们想要同时满足两个词精确匹配的话,就得使用 bool 的 must 来做
创建索引库 member 时并没有指定字段的类型,都是es默认生成的类型。默认生成的 name 字段是 text 类型。
两种数据类型:text和keyword
- text:查询时会进行分词解析;
- keyword:keyword 类型的词不会被分词器进行解析,直接作为整体进行查询;
match模糊匹配
match模糊匹配【实际底层就是多个term查询的结果给汇合在一起】
分析器(Analyzer)应用:match 查询会应用字段指定的分析器(如果有的话)来处理查询字符串。
这意味着它会处理文本数据的大小写、同义词、停用词等。
match 进行搜索的时候,会先进行分词拆分,拆完后,再来匹配。
"张三"被拆分解析为"张"和"三"两个词,所以只要name字段中包含"张"或者"三"的数据都能够匹配上。
如果想 "张"和"三"同时匹配到的话,那么可以使用 match_phrase,来看下面的例子:
match_phrase 称为短语搜索,要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致。
1416

被折叠的 条评论
为什么被折叠?



