Elasticsearch突出显示:"多重匹配"查询使用" copy_to"创建的自定义" _all" -fields

时间:2017-06-30 14:51:37

标签: elasticsearch

(Elasticsearch 5.2.2)

我在突出显示正常工作时遇到了一些麻烦。 我的地图有2个自定义创建 _all - 字段 myall1 myall2 ,它们是通过 copy_to 创建的:

"mytype": {
  "_all": {
    "enabled": false
  },
  "properties": {
    "myall": {
        "type": "text",
        "analyzer": "standard",
        "store": true
    },
    "myall2": {
        "type": "text",
        "analyzer": "standard",
        "store": true
    },
    "field1": {
        "type": "text",
        "copy_to": "myall1",
        "analyzer": "keyword"
    },
    "field2": {
        "type": "text",
        "copy_to": "myall2",
        "analyzer": "keyword"
    }
}

文件看起来像这样:

{
  "field1": "example text",
  "field2": "another text"
}

现在我正在运行 multi_match -query,将 myall1 提升3:

POST /myindex/mytype/_search
{
  "query": {
    "bool": {
      "must": {
        "multi_match": {
          "fields": ["myall1^3", "myall2"],
          "type": "cross_fields",
          "query": "example text",
          "operator": "and"
        }
      }
    }
  }
}

这很有效。问题是我无法突出显示结果中的原始源字段。 我将以下内容添加到查询中的方式与在ES-docs中完成相同的操作" _all示例":

  ,
  "highlight": {
    "pre_tags": ["<span class='highlight'>"],
    "post_tags": ["</span>"],
    "fields": {
      "*": {"require_field_match": false}
    }
  }

这只给了我&#34; myall1&#34;和#34; myall2&#34;,不在原始字段&#34; field1&#34;和&#34; field2&#34;。

如果我使用_all-field做类似的事情,一切都按预期工作。 主要区别在于:我使用 multi_match ,而示例使用 query_string 。 使用&#34; store&#34;:true和&#34; analyzer&#34;:&#34;标准&#34;没有帮助。

由于我的实际文档使用必须可搜索的嵌套对象,我可能无法执行完全不同的查询方法。

这是设计还是我错过了什么? 使用&#34; _all&#34; -field不允许我按照我试图实现它的方式来提升结果。

1 个答案:

答案 0 :(得分:0)

修正了它。 似乎突出显示原始字段要求他们使用与&#34; copy-to&#34;相同的分析器。目标领域。 否则他们只是不会出现。

我正在使用&#34; analyzer&#34;:&#34;关键字&#34;之前因为我不打算对这些字段进行实际查询。 现在一切都按预期工作了。