29

我知道使用字段设置在搜索中仅包含我想要的字段http://www.elasticsearch.org/guide/reference/api/search/fields/

...但我想知道我是否可以做相反的事情...以某种方式指定一个或两个我不希望包含在查询结果中的字段(例如附件)。当我可以指定要排除的字段时,必须输入我想要减去一两个的所有字段似乎很痛苦

4

2 回答 2

32

您可以使用源过滤(在 v. 1.6 和 v. 1.7 中测试):https ://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html

{
    "_source": {
        "include": [ "obj1.*", "obj2.*" ],
        "exclude": [ "*.description" ]
    },
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

您也可以在 GET 请求中使用它:

curl "localhost:9200/myindex/mytype/66a8f299870b4cab?_source_exclude=file._content&pretty"

前面的示例排除了附件字段中的文件内容。

于 2015-08-31T22:16:28.923 回答
8

您是否在问题中链接的同一页面上看到了 ‛partial‛ 的文档?这让你可以做你想做的事,尽管我相信只在‛_source‛字段上。请参阅https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-fields.html

从 加载数据时_sourcepartial字段可用于使用通配符来控制_source将根据 includeexclude模式加载的部分。

两者都include支持exclude多种模式:

{
    "query" : {
        "match_all" : {}
    },
    "partial_fields" : {
        "partial1" : {
            "include" : ["obj1.obj2.*", "obj1.obj4.*"],
            "exclude" : "obj1.obj3.*"
        }
    }
}
于 2013-08-14T05:09:01.000 回答