Elasticsearch术语过滤器无法工作?

22

我正在尝试实现以下术语过滤器。

{
  "query": {
    "term": {
      "name": "terry harvey"
    }
  }
}

但是我没有得到任何结果

{
  took: 3
  timed_out: false
  _shards: {
  total: 5
  successful: 5
  failed: 0
}
hits: {
    total: 0
    max_score: 0
    hits: [ ]
  }
}

当我使用“匹配过滤器”而不是“术语过滤器”时,我得到了48个结果。

我做错了什么?=(

谢谢!

2个回答

24

术语查询和过滤器不会被分析,这意味着它们只能找到完全匹配的内容。另一方面,匹配查询是经过分析的,你的姓名字段也可能被分析了。更多信息请参见这里


我明白了,但是我该怎么做才能获得一个确切名称为“terry harvey”的文档? - Guilherme GM
5
您需要将字段映射更改为not_analyzed。如果您需要通过精确值和全文本查询,则应查看multi field类型。 - Greg Marzouka
2
另一个不错的参考资料 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_finding_exact_values.html - Guilherme GM
1
我一直在使用索引:"not_analyzed",但仍然无法搜索大写字母字符串? - Sudhanshu Gaur

0

我正在使用ElasticSearch 8.7,并且正在更改查询

{
    "query": {
        "bool": {
            "filter": {
                "term": {
                    "name.keyword": "terry harvey"
                }
            }
       }
    }
}

已工作。

字段名称的映射为

    {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接