术语弹性查询未找到字母数字关键字文本的命中
term Elastic query not finding hit for alphanumeric keyword texts
在以下情况下,我将如何使用术语或术语弹性查询?
字段paidagentnumber
的映射集如下
"paidagentnumber": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
GET statements_full/statements/_search?q=paidagentnumber:"017M0"
正在系统中找到 80 条记录
但是下面的GET
没有得到任何记录
GET statements_full/statements/_search
{
"query": {
"term" : {"paidagentnumber":"017M0"}
}
}
但是
GET statements_full/statements/_search
{
"query": {
"term" : {"paidagentnumber":"21212"}
}
}
正在寻找命中结果,即如果 paidagentnumber
字段中没有字母(只有数字),term
查询正在寻找命中。
paidagentnumber
字段被分析(因为它是 "type": "text"
),所以它的内容将被分析器小写。 Term queries 没有被分析,它们被用来,according to the docs,找到"the exact term specified in the inverted index",所以这个小写分析不会应用到查询中,因此两者之间不匹配。 “017M0”与“017m0”不完全匹配。
这里有选项:
使用一个query_string query。这与 q
参数创建的查询类型相同,因此如果它按您想要的方式工作,请使用:
"query": {
"query_string" : {
"query": "paidagentnumber:017M0"
}
}
如果要使用术语查询,请使用关键字字段。您已经在此处创建了一个,因此只需搜索 paidagentnumber.keyword
字段即可。
"query": {
"term" : {
"paidagentnumber.keyword": "017M0"
}
}
如果您一开始真的不想对 paidagentnumber 字段进行任何类型的文本分析,那么您也可以从其定义中删除 text
类型:
"paidagentnumber": {
"type": "keyword",
"ignore_above": 256
}
在以下情况下,我将如何使用术语或术语弹性查询?
字段
paidagentnumber
的映射集如下"paidagentnumber": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }
GET statements_full/statements/_search?q=paidagentnumber:"017M0"
正在系统中找到 80 条记录但是下面的
GET
没有得到任何记录GET statements_full/statements/_search { "query": { "term" : {"paidagentnumber":"017M0"} } }
但是
GET statements_full/statements/_search { "query": { "term" : {"paidagentnumber":"21212"} } }
正在寻找命中结果,即如果
paidagentnumber
字段中没有字母(只有数字),term
查询正在寻找命中。
paidagentnumber
字段被分析(因为它是 "type": "text"
),所以它的内容将被分析器小写。 Term queries 没有被分析,它们被用来,according to the docs,找到"the exact term specified in the inverted index",所以这个小写分析不会应用到查询中,因此两者之间不匹配。 “017M0”与“017m0”不完全匹配。
这里有选项:
使用一个query_string query。这与
q
参数创建的查询类型相同,因此如果它按您想要的方式工作,请使用:"query": { "query_string" : { "query": "paidagentnumber:017M0" } }
如果要使用术语查询,请使用关键字字段。您已经在此处创建了一个,因此只需搜索
paidagentnumber.keyword
字段即可。"query": { "term" : { "paidagentnumber.keyword": "017M0" } }
如果您一开始真的不想对 paidagentnumber 字段进行任何类型的文本分析,那么您也可以从其定义中删除
text
类型:"paidagentnumber": { "type": "keyword", "ignore_above": 256 }