【问题标题】:elasticsearch term query doesn't workelasticsearch 术语查询不起作用
【发布时间】:2018-11-09 01:44:46
【问题描述】:

我对弹性搜索中的术语查询有疑问。我发送以下查询:

{
    "query": {
       "term": {
            "title":"Test1"
        }
    }
}

我有一个空结果:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

但如果我发送以下内容:

{
    "query": {
       "term": {
            "root":true
        }
    }
}

我有:

{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 3,
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "content_2018-05-30-092148",
                "_type": "topic",
                "_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb1",
                "_score": 0.2876821,
                "_source": {
                    "_meta": {
                        "model": "Secafi\\Content\\Topic"
                    },
                    "id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb1",
                    "title": "Test2",
                    "root": true
                }
            },
            {
                "_index": "content_2018-05-30-092148",
                "_type": "topic",
                "_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb2",
                "_score": 0.2876821,
                "_source": {
                    "_meta": {
                        "model": "Secafi\\Content\\Topic"
                    },
                    "id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbeb2",
                    "title": "Test3",
                    "root": true
                }
            },
            {
                "_index": "content_2018-05-30-092148",
                "_type": "topic",
                "_id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbebc",
                "_score": 0.2876821,
                "_source": {
                    "_meta": {
                        "model": "Secafi\\Content\\Topic"
                    },
                    "id": "6064f7ac-63d5-11e8-adc0-fa7ae01bbebc",
                    "title": "Test1",
                    "root": true
                }
            }
        ]
    }
}

如果我对标题字段进行匹配查询,我会得到相同的结果,它永远不会返回任何文档。

怎么了。为什么第一个查询没有返回文档 Test1?

【问题讨论】:

  • 你能展示你的映射吗?

标签: elasticsearch search term


【解决方案1】:

术语查询查找确切的术语。您可能正在使用具有小写过滤器的标准分析器。因此,当索引中的内容是“term1”时,您正在搜索“Term1”。

Term 非常适用于完全匹配的数字或 ID(如 9844-9332-22333)。对于诸如帖子标题之类的字段而言,情况则不然。

要确认这一点,您可以这样做:

{
    "query": {
       "term": {
            "title.keyword":"Test1"
        }
    }
}

如果您的记录使用“Test1”的确切标题编入索引,这应该有效。这使用关键字分析器而不是标准分析器(注意标题后的“.keyword”)。在最新版本的 elasticsearch 中,默认情况下会添加关键字分析器,除非您覆盖此行为。关键字是一个完全匹配的“noop”分析器,它将整个字符串作为单个标记返回以进行匹配。

对于一个标题,你可能想要的是:

{
    "query": {
       "match": {
            "title":"Test1"
        }
    }
}

匹配查询通过标准分析器运行您的输入字符串,该分析器默认用于索引文档(小写等),因此 elasticsearch 能够将您的查询文本与 elasticsearch 索引中的内容相匹配。

查看文档以获取有关匹配与术语的更多详细信息。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
相关资源
最近更新 更多