elasticsearch 弹性搜索2.0/2.1问题与Highlighter和Bool查询,elasticsearch,highlight,booleanquery,elasticsearch,Highlight,Booleanquery" /> elasticsearch 弹性搜索2.0/2.1问题与Highlighter和Bool查询,elasticsearch,highlight,booleanquery,elasticsearch,Highlight,Booleanquery" />

elasticsearch 弹性搜索2.0/2.1问题与Highlighter和Bool查询

elasticsearch 弹性搜索2.0/2.1问题与Highlighter和Bool查询,elasticsearch,highlight,booleanquery,elasticsearch,Highlight,Booleanquery,我在Elastic 2.0和2.1中遇到了突出显示的问题-它返回的信息比我认为的要多 我正在构造一个bool查询(在2.0+版本中,过滤的查询关键字已被弃用,因此我正在尝试更新语法)。我正在查询中构建一个必须部分和一个过滤器部分,然后请求突出显示信息 文档中说可以在查询上下文或过滤器上下文中使用查询,但高亮显示似乎没有表示这样的区别 以下是我的完整查询: GET /sample04/_search { "query": { "bool": { "m

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

我正在构造一个bool查询(在2.0+版本中,过滤的查询关键字已被弃用,因此我正在尝试更新语法)。我正在查询中构建一个必须部分和一个过滤器部分,然后请求突出显示信息

文档中说可以在查询上下文或过滤器上下文中使用查询,但高亮显示似乎没有表示这样的区别

以下是我的完整查询:

GET /sample04/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "query": { "query_string": { "query": "east west" } }
                }
            ],
            "filter": [
                {
                    "terms": {"OwnerId": ["1", "2","3"]}
                }
            ]
        }
    },
    "highlight": {
        "fields": {
            "*": { "require_field_match": "false" }
        }
    }
}
因此,此查询的工作原理与预期一样-我们正在查询术语east或west,我们正在筛选属于安全要求的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>"
               ]
            }
“突出显示”:{
“SomeTextField”:[
“西北”
],
“所有者ID”:[
"3"
],
“序列号”:[
"3-3"
],
“关联价值”:[
"3",
"2"
],
“相关价值”:[
"3",
"3",
"3",
"3",
"3"
]
}
如何让高亮显示与我在“必须”部分中的查询匹配,但忽略过滤器?我认为,它应该忽略高亮显示作为筛选器一部分的匹配项,特别是当它高亮显示包含值的字段时,这些字段被请求筛选特定字段,但它在我的文档中的任何位置使用该值。这似乎有点错误,但也许是我的理解

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

我不能指定一个字段来生成突出显示信息,而我们使用Elastic作为“一次查找任意位置”模型的搜索,所以我不知道结果将从哪个字段返回

你能看出我做错了什么吗?如果您能理解这一点,我们将不胜感激

您可以为此目的使用。将突出显示部分更改为

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