ElasticSearch - match vs term
match vs term
这个问题来自stackoverflow
https://stackoverflow.com/questions/23150670/elasticsearch-match-vs-term-query
首先还原一下这个场景
创建索引test
,含有一个_doc
类型
PUT /test
{
"mappings" : {
"_doc" : {
"properties" : {
"field1" : {
"type" : "text",
"analyzer" : "standard"
}
}
}
}
}
索引一个_doc
类型的文档到test
中
POST /test/_doc
{
"field1": "GET"
}
通过match
查找GET
,可以找到结果
GET /test/_doc/_search
{
"query": {
"bool": {
"must": [
{"match": {"field1": "GET"}}
]
}
}
}
通过term
查找GET
,找不到结果
GET /test/_doc/_search
{
"query": {
"bool": {
"must": [
{"term": {"field1": "GET"}}
]
}
}
}
Question
使用match
查询request.method:GET
{
"query": {
"filtered": {
"query": {
"match": {
"request.method": "GET"
}
},
"filter": {
"bool": {
"must": [
...
match
查询可以拿到结果,但问题是当使用term
来进行查询时没有任何结果
{
"query": {
"filtered": {
"query": {
"term": {
"request.method": "GET"
}
},
"filter": {
"bool": {
"must": [
...
ANSWER
可能使用了Standard Analyzer
,在对文档进行索引的时候GET
变成了get
,而文档的_source
依然是GET
。
GET /_analyze
{
"analyzer": "standard",
"text": "GET"
}
# response
# 可以看到token是get
{
"tokens": [
{
"token": "get",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
}
]
}
match
查询将会对搜索的句子应用Standard Analyzer
,即搜索中的GET
会变成get
,那么就会命中文档。而term
查询并不会对搜索的内容进行分析,因此会直接查找get
,那么就找不到该文档。
如果想要term查询可以生效,那么可以:
- 将搜索中的
GET
变为小写的get
- 修改
request.method
字段的类型为not_analyzed
- 修改
request.method
字段的类型为keyword
官方文档的一些说明
ElasticSearch官方文档对match
和term
的说明
match
接受文本/数字/日期,并分析它们
term
根据提供的确切值查找文本
ElasticSearch - match vs term的更多相关文章
- ElasticSearch match, match_phrase, term区别
1.term结构化字段查询,匹配一个值,且输入的值不会被分词器分词. 比如查询条件是: { "query":{ "term":{ "foo" ...
- elasticsearch 查询(match和term)
elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...
- (转载)elasticsearch 查询(match和term)
原文地址:https://www.cnblogs.com/yjf512/p/4897294.html elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版 ...
- ES 入门记录之 match和term查询的区别
ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...
- Elasticsearch中的Term查询和全文查询
目录 前言 Term 查询 exists 查询 fuzzy 查询 ids 查询 prefix 查询 range 查询 regexp 查询 term 查询 terms 查询 terms_set 查询 t ...
- (转)Elasticsearch查询规则------match和term
es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询 ...
- Elasticsearch查询规则(一)match和term
es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比如 GET /megacorp/employee/_search //查询 ...
- ES 20 - 查询Elasticsearch中的数据 (基于DSL查询, 包括查询校验match + bool + term)
目录 1 什么是DSL 2 DSL校验 - 定位不合法的查询语句 3 match query的使用 3.1 简单功能示例 3.1.1 查询所有文档 3.1.2 查询满足一定条件的文档 3.1.3 分页 ...
- 在Elasticsearch中查询Term Vectors词条向量信息
这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...
随机推荐
- TCP输出和UDP输出
一.TCP输出 1)对端必须确认收到的数据,伴随来自对端的ACK的不断到达,本端TCP至此才能从套接字发送缓冲区中丢弃 已确认的数据:TCP必须为已发送的数据保留一个副本,直到它被对端确认为止 2)每 ...
- [BJWC2011]最小三角形(分治+最近点对)
题面:BJWC2011 最小三角形 \(solution:\) 昨天才学完平面最近点对,今天就要求平面最近的三个点,显然不是巧合. 仔细一思考,我们用来求平面最近点对的方法不就可以用到三个点上吗? 就 ...
- 从前端和后端两个角度分析jsonp跨域访问(完整实例)
一.什么是跨域访问 举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容.如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.你可以理解为两个域名之间不能跨过域名来发送请求或者请 ...
- html 速查表
HTML 速查列表 HTML 速查列表. 你可以打印它,以备日常使用. HTML 基本文档 <!DOCTYPE html> <html> <head> <ti ...
- spring整合ehcache2.5.2缓存异常-- net.sf.ehcache.CacheException
报错如下: The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcach ...
- 跟踪OceanLotus的新下载程序KerrDown
攻击的方法 两种方法将KerrDown下载器传递给目标.一个是使用带有恶意宏的Microsoft Office文档,另一个是包含带有DLL side-loading合法程序的RAR存档 .对于RAR存 ...
- Python 的 six模块简介
Python 的 six模块简介 six : Six is a Python 2 and 3 compatibility library Six没有托管在Github上,而是托管在了Bitbucket ...
- jQuery 实现添加表格行,删除行,调用日期控件
$(function () { getdatepicker(); getdatetimepicker(); }); $(document).on('click','#addTable',addTr); ...
- 一步步实现windows版ijkplayer系列文章之六——SDL2源码分析之OpenGL ES在windows上的渲染过程
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- 编译时bad substitution的解决办法
由于使用的使用的编译器不同导致, 需要使用shell为 #!/bin/bash 即可.