[英]elasticsearch match vs term query
我使用匹配查询搜索“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": [
...
我认为 Term 查询是 Match 查询的“未分析”版本。 如上图所示,至少有一条记录的“request.method”等于“GET”。 为什么上面提到的 Term 查询没有结果? 谢谢你。
假设您使用的是标准分析器,当存储在索引中时GET
变为get
。 源文档仍将具有原始的“GET”。
match
查询将对搜索词应用相同的标准分析器,因此将匹配存储在索引中的内容。 term
查询不会对搜索词应用任何分析器,因此只会在倒排索引中查找该确切词。
要在您的示例中使用术语查询,请将大写的“GET”更改为小写的“get”或更改您的映射,以便将 request.method 字段设置为not_analyzed
。
elasticsearch中term和match的区别
术语是一个精确的查询
匹配是一个模糊查询
该术语是完美匹配,即精确查询。 搜索词在搜索之前不会被切分,所以我们的搜索词必须是文档切分集之一。 假设我们要查找所有名为 Jesus Verma 的文档。
$curl -XGET http://localhost:9200/index/doc/_search?pretty -d
'{
"query":{
"term":{
"title": "Jesus Verma"
}
}
}'
匹配查询将首先对搜索词进行分类。 分词后,分词结果会一一匹配。 因此,相较于term的精确搜索,match是分词匹配搜索,匹配搜索有两个功能相似的变体。 一种是match_phrase。 一种是 multi_match
$curl -XGET http://localhost:9200/index/doc/_search?pretty -d
'{
"query": {
"match": {
"content": "Banglore, India"
}
}
}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.