从搜索中排除某些字段-Elasticsearch

时间:2018-10-18 13:45:02

标签: elasticsearch

我已经建立了索引文档,每个文档都有100多个字段,每个文档都使用Edge gram标记器进行了分析,以支持自动建议。我确实需要在所有字段上进行搜索的自由文本搜索。当我尝试这样做时,搜索也会发生具有自动完成分析功能的字段(例如Data.autocomplete_analyzed)。我必须通过仅搜索以“文本”(例如数据)类型分析的字段来限制此情况。在1.索引时间2.查询时间中是否有这样做的方法。 映射文件:

    "mappings": {
                "_doc": {
                    "properties": {
                        "Data": {
                            "type": "text",
                            "fields": {
                                "autocomplete_analyzed": {
                                    "type": "text",
                                    "analyzer": "autocomplete"
                                },
                                "keyword": {
                                    "type": "keyword",
                                    "ignore_above": 256
                                }
                            }
                        }
                } 
               }

搜索查询:

 {
"query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "aim",
            "type": "phrase",
            "slop": "2",
            "fields": []
          }
        },
        {
          "multi_match": {
            "query": "aim",
            "fuzziness": "1",
            "fields": []
          }
        }
      ],
      "minimum_should_match": 1 
}

1 个答案:

答案 0 :(得分:0)

在查询时间内,您可以使用源过滤来选择所需的字段。

    GET /_search
{
    "_source": [ "obj1.*", "obj2.*" ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

如果您使用query_string进行搜索,则可以使用字段

    GET /_search
{
  "query": {
    "query_string": {
      "query": "this AND that OR thus",
      "fields": [
          "docfilename",
          "filepath",
          "singlewordfield"
        ]
    }
  }
}