在以下情况下,我将如何使用一个或多个术语弹性查询?
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
查询正在查找匹配结果。
答案 0 :(得分:0)
对paidagentnumber
字段进行了分析(因为它是"type": "text"
),因此分析器将其内容小写。不分析术语查询,而是使用according to the docs来查找“倒排索引中指定的精确术语”,因此该下大写分析将不会应用于查询,因此两者之间的不匹配。 “ 017M0”与“ 017m0”不完全匹配。
您在这里有选择
使用query_string query。这与q
参数创建的查询类型相同,因此,如果您需要的话,请使用该查询:
"query": {
"query_string" : {
"query": "paidagentnumber:017M0"
}
}
如果要使用术语查询,请使用关键字字段。您已经在这里创建了一个,因此只需搜索paidagentnumber.keyword
字段即可。
"query": {
"term" : {
"paidagentnumber.keyword": "017M0"
}
}
如果您首先真的不想在payedagentnumber字段上进行任何形式的文本分析,则可以从其定义中消除text
类型:
"paidagentnumber": {
"type": "keyword",
"ignore_above": 256
}