问题描述
我使用以下 PUT 命令通过 AWS Elasticsearch 上的 Kibana 在我的 Elasticsearch 域中创建了一个简单的索引:
PUT sals_poc_test_20210217
{
"settings" : {
"index" : {
"number_of_shards" : 10,"number_of_replicas" : 1,"max_result_window": 50000,"max_rescore_window": 50000
}
},"mappings": {
"dynamic": "false","properties": {
"ID_NUMBER": {
"type": "keyword"
}
"CLASS_NAME": {
"type": "keyword"
}
"PUBLISHER_ID": {
"type": "keyword"
},"INGESTION_DATE": {
"type": "date","format": "strict_date_optional_time"
},"DECISION": {
"type": "keyword"
},"ID": {
"type": "keyword"
}
}
}
}
然后我将一个文档放入此索引中:
{
"id_number" : "guvqlsxz","class_name" : "/TEST_1/sample_1","publisher_id" : "1234","ingestion_date" : "2021-02-12 16:48:57.503665","decision" : "yes","id" : "0958741792"
}
然后我尝试通过上述 6 个字段中的任何一个来搜索此文档,但没有一个返回给我此文档。 下面的示例搜索命令:
POST /sals_poc_test_20210217/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "id_number": "guvqlsxz"}}
]
}
}
}
但是,当我使用以下命令检索所有内容时:
POST /sals_poc_test_20210217/_search
{
"query": {
"match": {
"_index": "sals_poc_test_20210217"
}
}
}
所有文件都很好地返回。
谁能解释为什么按这些索引字段搜索不起作用?
谢谢!
解决方法
您可以在文档和 对象级别。将动态参数设置为 false 会忽略新的 字段,如果 Elasticsearch 遇到 未知领域。
正如 GitHub issue 中提到的,动态设置的 false 选项接受具有不在映射中的字段的文档(即它不会抛出错误),但它不会索引这些字段,所以你赢了'无法搜索这些字段。