首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数字令牌的Elasticsearch术语查询

对数字令牌的Elasticsearch术语查询
EN

Stack Overflow用户
提问于 2019-06-17 12:50:10
回答 1查看 317关注 0票数 1

我需要向Elasticsearch数据库解释术语查询的一些奇怪行为,该数据库包含字符串中的数字部分。查询非常简单:

代码语言:javascript
复制
{
    "query": {
        "bool": {
            "should": [
                {
                    "term": {
                        "address.street": "8 kvetna"
                    }
                }
            ]
        }
    }
}

问题是术语8 kvetna返回空结果。我试着用_analyze来制作像8,k,kv,kve这样的常规标记.而且,我很确定数据库中有一个值8 kvetna。以下是该字段的映射:

代码语言:javascript
复制
{
    "settings": {
        "index": {
            "refresh_interval": "1m",
            "number_of_shards": "1",
            "number_of_replicas": "1",
            "analysis": {
                "filter": {
                    "autocomplete_filter": {
                        "type": "edge_ngram",
                        "min_gram": "1",
                        "max_gram": "20"
                    }
                },
                "analyzer": {
                    "autocomplete": {
                        "filter": [
                            "lowercase",
                            "asciifolding",
                            "autocomplete_filter"
                        ],
                        "type": "custom",
                        "tokenizer": "standard"
                    }
                    "default": {
                        "filter": [
                            "lowercase",
                            "asciifolding"
                        ],
                        "type": "custom",
                        "tokenizer": "standard"
                    }
                }
            }
        }
    },
    "mappings": {
        "doc": {
            "dynamic": "strict",
            "_all": {
                "enabled": false
            },
            "properties": {
                "address": {
                    "properties": {
                        "city": {
                            "type": "text",
                            "analyzer": "autocomplete"
                        },
                        "street": {
                            "type": "text",
                            "analyzer": "autocomplete"
                        }
                    }
                }
            }
        }
    }
}

是什么导致了这个奇怪的结果?我不明白。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-17 12:58:30

到目前为止开局很好!唯一的问题是,您使用的是term查询,而应该使用match查询。term查询将尝试对8 kvetna进行精确匹配,这不是您想要的。以下查询将有效:

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {                               <--- change this
            "address.street": "8 kvetna"
          }
        }
      ]
    }
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56631697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档