有没有办法在Elasticsearch查询中排除字段

con*_*t47 15 elasticsearch

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

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

Rob*_*rto 13

您可以使用源过滤(在1.6和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" }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

curl "localhost:9200/myindex/mytype/66a8f299870b4cab?_source_exclude=file._content&pretty"
Run Code Online (Sandbox Code Playgroud)

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


Jam*_*son 7

您是否在问题中链接的同一页面上看到了"部分"的文档?这可以让你做你想做的事,虽然只在我认为的'_source'字段.请参阅https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-fields.html

从中加载数据时_source,partial可以使用字段来使用通配符来控制_source将根据includeexclude模式加载 哪些部分.

双方includeexclude支持多种模式:

{
    "query" : {
        "match_all" : {}
    },
    "partial_fields" : {
        "partial1" : {
            "include" : ["obj1.obj2.*", "obj1.obj4.*"],
            "exclude" : "obj1.obj3.*"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)