布尔查询中 Elasticsearch 中术语和匹配项之间的区别
Diference between term and match in Elasticsearch in a bool query
我有一个简单的文档,其中 _source 看起来像:
{
"name" : "myProduct",
"label" : "isApiisApi",
"isApi" : 1,
"sold" : 0
}
我一直在尝试使用 bool 创建多条件查询。我让它工作的唯一方法是使用匹配查询:
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "match": { "name": "myProduct" } }
]
}
}
}
但为什么当我使用术语查询(作为最终条件)时它不起作用:
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "term": { "name": "myProduct" } }
]
}
}
}
Tldr;
弹性 text fields upon ingestion passes the data into a analyzer.
默认 standard analyzer is used. Which comes with a token filter named Lowercase.
您的文本以小写形式编入索引。
但是您正在使用 term 搜索索引数据的精确匹配。
你的情况 myproduct
=/= myProduct
.
复制
默认弹性索引,两个字段中的所有字符串类数据。
text
keyword
对于完全匹配,您要使用关键字版本。
见下文:
POST /72020272/_doc
{
"name" : "myProduct",
"label" : "isApiisApi",
"isApi" : 1,
"sold" : 0
}
GET /72020272/_mapping
GET /72020272/_search
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "term": { "name": "myProduct" } }
]
}
}
}
GET /72020272/_search
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "term": { "name.keyword": "myProduct" } }
]
}
}
}
我有一个简单的文档,其中 _source 看起来像:
{
"name" : "myProduct",
"label" : "isApiisApi",
"isApi" : 1,
"sold" : 0
}
我一直在尝试使用 bool 创建多条件查询。我让它工作的唯一方法是使用匹配查询:
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "match": { "name": "myProduct" } }
]
}
}
}
但为什么当我使用术语查询(作为最终条件)时它不起作用:
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "term": { "name": "myProduct" } }
]
}
}
}
Tldr;
弹性 text fields upon ingestion passes the data into a analyzer.
默认 standard analyzer is used. Which comes with a token filter named Lowercase.
您的文本以小写形式编入索引。
但是您正在使用 term 搜索索引数据的精确匹配。
你的情况 myproduct
=/= myProduct
.
复制
默认弹性索引,两个字段中的所有字符串类数据。
text
keyword
对于完全匹配,您要使用关键字版本。
见下文:
POST /72020272/_doc
{
"name" : "myProduct",
"label" : "isApiisApi",
"isApi" : 1,
"sold" : 0
}
GET /72020272/_mapping
GET /72020272/_search
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "term": { "name": "myProduct" } }
]
}
}
}
GET /72020272/_search
{
"query": {
"bool": {
"must": [
{ "term": { "sold": 0 } },
{ "term": { "isApi": 1 } },
{ "term": { "name.keyword": "myProduct" } }
]
}
}
}