Elasticsearch:查询避免定义的分析器/使用其他分析器

时间:2013-04-03 13:46:27

标签: elasticsearch

我对ElasticSearch查询有疑问。我有一个名为“name”的字段,它是用语音插件中的分析器定义的。

  "name" : {
      "type" : "string",
      "store" : "yes",
      "index" : "analyzed",
      "analyzer" : "soundsAnalyzer",
      "boost" : 10.0
  },

到目前为止一切正常!但是我对这个领域有一定的疑问,我希望得到完全匹配而不是类似的匹配。我试图通过使用术语查询和文本查询来实现此目的。术语查询根本不返回任何结果,我没有胶水为什么。通过使用文本查询和定义另一个分析器,我什么也没得到。我尝试过以下查询:

{
  "query": {
    "text": {
      "documents.name": {
        "query": "England",
        "analyzer": "plainAnalyzer"
      }
    }
  }
}

所以我的问题是,如何在映射中避免定义的分析器,只是为了获得完全匹配? TIA

1 个答案:

答案 0 :(得分:1)

您必须为此字段编制两次索引 - 一次使用soundsAnalyzer,另一次使用plainAnalyzer。您可以使用multi_field类型:

来实现此目的
"name" : {
    "type" : "multi_field",
    "fields" : {
        "name" : {"type" : "string", "store" : "yes", "index" : "analyzed", "analyzer" : "soundsAnalyzer", "boost" : 10.0},
        "plain" : {"type" : "string", "index" : "analyzed", "analyzer" : "plainAnalyzer"}
    }
}

使用soundsAnalyzer的所有当前查询将保持不变。在需要plainAnalyzer的查询中,您可以使用name.plain代替name

{
  "query": {
    "text": {
      "documents.name.plain": {
        "query": "England"
      }
    }
  }
}