【问题标题】:ElasticSearch cannot find an exact value that exists in a string fieldElasticSearch 找不到字符串字段中存在的确切值
【发布时间】:2017-04-15 12:07:55
【问题描述】:

当我执行空查询以列出一些结果时,我看到值在那里。例如:

{
    "took": 6,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 3024,
        "max_score": 1.0,
        "hits": [{
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5-j6uVuoyTMhX204",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1029.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5-mTuVuoyTMhX205",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1321.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5-xkuVuoyTMhX209",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail2567.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5zr8uVuoyTMhX20F",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail2122.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5z23uVuoyTMhX20L",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1823.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5-53uVuoyTMhX21A",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1616.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5_AXuVuoyTMhX21C",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail3002.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5_j3uVuoyTMhX21U",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail3039.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5_yQuVuoyTMhX21d",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1136.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5zbquVuoyTMhX20C",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail166.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5zfsuVuoyTMhX20E",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail2767.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt59jQuVuoyTMhX20p",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail2852.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5_PpuVuoyTMhX21J",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1392.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt58YguVuoyTMhX20N",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail603.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5_38uVuoyTMhX21h",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail416.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt5-JFuVuoyTMhX20y",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail896.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt6B1NuVuoyTMhX22i",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail846.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt6B3vuVuoyTMhX22k",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1214.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt6B90uVuoyTMhX22o",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail1536.png"
            }
        }, {
            "_index": "geotiff_test",
            "_type": "geometa",
            "_id": "AVtt6COkuVuoyTMhX22y",
            "_score": 1.0,
            "_source": {
                "thumbnail": "thumbnail246.png"
            }
        }]
    }
}

然而,当我运行这样的查询时,它什么也没有返回:

curl -X POST http://localhost:9200/geotiff_test/geometa/_search -d '{
    "query": {
        "term": {
            "thumbnail": "thumbnail1536.png"
        }
    }
}'

这是结果:

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

如果这是 Solr,我要做的就是运行这个简单的查询:thumbnail:"thumbnail1536.png"

谁能告诉我这里出了什么问题?

【问题讨论】:

    标签: java elasticsearch lucene


    【解决方案1】:

    确切的术语不匹配,因为您的文档字段 thumbnail 已使用 standard 分析器进行分析并将其存储为 thumbnail1536png

    在 Elasticsearch 中,text (full-text) 和 keyword (exact-term) 有不同的查询。你写的属于后一类。

    如果您运行以下full-text 查询,您将获得所需的结果:

    curl -X POST http://localhost:9200/geotiff_test/geometa/_search -d '{
        "query": {
            "match": {
                "thumbnail": "thumbnail1536.png"
            }
        }
    }'
    

    但当您尝试使用term 搜索exact-term 时,首选查询。

    curl -X POST http://localhost:9200/geotiff_test/geometa/_search -d '{
        "query": {
            "term": {
                "thumbnail.keyword": "thumbnail1536.png"
            }
        }
    }'
    

    注意:这里的.keywordkeyword 版本的thumbnail 字段。

    虽然两者产生相同的结果,但上述查询比前一个更有效。

    【讨论】:

      【解决方案2】:

      这取决于您的字段是如何映射/键入的。请参考来自弹性搜索网站的link

      请注意,您可以更改映射以更好地满足您的需求。

      【讨论】:

      • 我真的是 ES 新手。所以我不确定为什么这甚至很重要,因为在 Solr 中,该查询将针对字符串或文本字段。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多