elasticsearch - 对 zip_code 的 Elasticsearch 查询失败
问题描述
我在 elasticsearch 上有一个我无法解释的奇怪行为。
当我做 :
POST /ad_search/_search
{
"query": {
"match": {
"city_code": "2A247"
}
}
}
我有多个结果。但是当我这样做时(此代码由库生成):
POST /ad_search/_search
{
"from":0,
"query": {
"bool": {
"must":[
{"term":{"city_code":"2A247"}}
]
}
}
}
我没有结果。
当我搜索所有其他 zip_code 时,只有像 71459 这样的数字。这两个查询都运行良好,并给了我相同的结果。
我正在考虑映射问题,但似乎还可以:
GET /ad_search/_mapping
{
"ad_search" : {
"mappings" : {
"properties" : {
"city_code" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
有人有什么想法可以解锁我吗?
谢谢
解决方案
这是因为city_code
是文本类型,因此被分析,因此被索引的是2a247
(小写)。
因此,您可以使用完全匹配的查询city_code.keyword
进行查询term
POST /ad_search/_search
{
"from":0,
"query": {
"bool": {
"must":[
{"term":{"city_code.keyword":"2A247"}}
]
}
}
}
或者在字段上使用匹配查询city_code
:
POST /ad_search/_search
{
"from":0,
"query": {
"bool": {
"must":[
{"match":{"city_code":"2A247"}}
]
}
}
}
推荐阅读
- javascript - 用户单击提交按钮时如何隐藏 iframe 表单
- aurelia2 - 使用 aurelia“buscar”作为函数时出错
- android - 如何在另一个应用程序中获取另一个应用程序创建的文件
- python - python中的面向对象的阶乘计算器
- python - 遍历列中的每个类别并将另一列中的值添加为单独的 df
- css - 为什么颜色过渡只适用于反向 CSS
- c# - 如何在 C# 中通过 SignalR 传递复杂对象?
- r - docker闪亮的应用程序:运行docker镜像时没有这样的文件或目录
- java - (Spring Batch)为什么表'batch_job_instance'已经存在?
- fortran - 我们如何在fortran 95中计算一个大数