1

我想搜索查询的一部分以被视为短语。例如,我想搜索“你能向我展示酒店和航空业的文件吗”在这里我希望将航空业视为短语。我在 multi_match 中找不到任何此类设置. 即使我们尝试使用 multi_match 查询,使用 "Can you show me documents for Hospitality 和 \"Airline Industry\"" 。默认分析器将其分解为单独的标记。我不想更改分析器的设置。而且我发现我们可以在 simple_query_string 中执行此操作,但这会导致我们无法像在 multi_match 布尔查询中那样应用过滤器选项,因为我也想在某些字段上应用过滤器。

search_text="Can you show me documents for Hospitality and Airline Industry" 现在我想将 Airline Industry 作为短语传递,以针对 2 个字段搜索我的索引文档。好的,所以说我有这样的现有代码。

If filter:
qry={
    “query":{
        “bool”:{
            “must”:{
                "multi_match":{
                "query":search_text,
                "type":"best_fields",
                "fields":["TITLE1","TEXT"],
                "tie_breaker":0.3,
                }
            },
            “filter”:{“terms”:{“GRP_CD”:[“1234”,”5678”]     }
    }
    }

else:
qry={

    "query":{
        "multi_match":{
        "query":search_text',
        "type":"best_fields",
        "fields":["TITLE1",TEXT"],
        "tie_breaker":0.3
        }
    }
}

'但后来我意识到,即使我传递了这样的搜索字符串,我也意识到这段代码没有将航空业作为一个短语来处理,“你能给我看一下酒店业和“航空业”的文件吗?”

根据弹性搜索文档,我知道有这个查询可以处理这个

qry={"query":{
"simple_query_string":{
"query":"Can you show me documents for Hospitality and \"Airline Industry\"",
"fields":["TITLE1","TEXT"] }
} }

但是现在我的问题是,如果用户想要应用过滤器..with 过滤器查询,我无法通过 simple_query_string' 传递短语和布尔查询

4

1 回答 1

0

您始终可以使用boolean query组合查询。让我们逐案理解。在讨论这些案例之前,我想澄清一件关于过滤器的事情。布尔查询的过滤器子句的行为就像一个必须子句,但不同之处在于过滤器子句中的任何查询(甚至是另一个带有必须/应该子句的布尔查询)都具有过滤器上下文。过滤上下文意味着,查询的那部分将不被考虑用于分数计算。

现在让我们继续讨论案例:

案例1:只有查询,没有过滤器。

{
  "query": {
    "bool": {
      "must": [
        {
          "simple_query_string": {
            "query": "Can you show me documents for Hospitality and \"Airline Industry\"",
            "fields": [
              "TITLE1",
              "TEXT"
            ]
          }
        }
      ]
    }
  }
}

请注意,查询与您在问题中指定的相同。我在这里所做的只是将它包装在一个布尔查询中。这不会对查询进行任何逻辑更改,但这样做可以更轻松地以编程方式将查询添加到过滤子句。

案例 2:带过滤器的短语查询。

{
  "query": {
    "bool": {
      "must": [
        {
          "simple_query_string": {
            "query": "Can you show me documents for Hospitality and \"Airline Industry\"",
            "fields": [
              "TITLE1",
              "TEXT"
            ]
          }
        }
      ],
      "filter": [
        {
          "terms": {
            "GRP_CD": [
              "1234",
              "5678"
            ]
          }
        }
      ]
    }
  }
}

这样,您可以将查询(查询上下文)与过滤器结合起来。

于 2020-06-07T05:35:55.557 回答