【问题标题】:Elastic Search 2.0/2.1 Issue with Highlighter and the Bool Query带有荧光笔和 Bool 查询的 Elastic Search 2.0/2.1 问题
【发布时间】:2016-03-04 10:17:14
【问题描述】:

我在 Elastic 2.0 和 2.1 中突出显示时遇到问题 - 它返回的信息比我认为的要多。

我正在构建一个 bool 查询(filtered 查询关键字在 2.0+ 中已弃用,因此我正在尝试更新我的语法)。我正在查询中构建 must 部分和 filter 部分,然后请求突出显示信息。

文档说在查询上下文或过滤上下文中使用查询,但荧光笔似乎没有表示这种区别。

这是我的完整查询:

GET /sample04/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "query": { "query_string": { "query": "east west" } }
                }
            ],
            "filter": [
                {
                    "terms": {"OwnerId": ["1", "2","3"]}
                }
            ]
        }
    },
    "highlight": {
        "fields": {
            "*": { "require_field_match": "false" }
        }
    }
}

所以这个查询按预期工作 - 我们正在查询东方或西方的术语,我们正在过滤作为我们安全要求的一部分的 Id 字段的文档,然后我要求突出显示信息。

然而,缺点是突出显示信息包含我在过滤器中提交的每个值的每个实例(在本例中为 1、2 或 3)匹配我文档任何部分的任何字段中的任何值,例如这个:

 "highlight": {
               "SomeTextField": [
                  "North <em>West</em>"
               ],
               "OwnerId": [
                  "<em>3</em>"
               ],
               "SerialNumber": [
                  "<em>3</em>-<em>3</em>"
               ],
               "AssociatedValue": [
                  "<em>3</em>",
                  "<em>2</em>"
               ],
               "RelatedValue": [
                  "<em>3</em>",
                  "<em>3</em>",
                  "<em>3</em>",
                  "<em>3</em>",
                  "<em>3</em>"
               ]
            }

如何让荧光笔匹配我在必须部分中的查询,但忽略过滤器?我认为它应该忽略作为过滤器一部分的突出显示匹配项,特别是当它突出显示包含值的字段被请求过滤特定字段时,但它在我的文档中的任何位置使用该值。不知怎的,这似乎是错误的,但也许这是我的理解。

作为一个仅供参考,如果我将 require_field_match 设置为 TRUE,那么我只会得到与过滤器匹配的命中,而不会得到与查询匹配的命中。

我无法指定一个字段来为其生成突出显示信息,而我们使用 Elastic 作为搜索一旦找到任何地方模型,所以我不知道我的结果将从哪个字段返回。

你能看出我做错了吗? 非常感谢了解这一点。

【问题讨论】:

    标签: elasticsearch highlight booleanquery


    【解决方案1】:

    您可以为此目的使用highlight query。将高亮部分更改为

    "highlight": {
        "fields": {
          "*": {
            "highlight_query": {
              "query_string": {
                "query": "east west"
              }
            }
          }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2014-04-11
      • 2021-04-24
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      相关资源
      最近更新 更多