弹性搜索:在“ query_string”中使用“完全匹配”来增强结果,而无需指定字段

时间:2019-07-05 07:02:49

标签: java elasticsearch

我正在使用query_string从Elastic中搜索记录,

查询示例:

GET /stories_qa/_search
{
  "query": {
    "query_string": {
      "query": "Johnson && Johnson"
    }
  }
}

此查询为我提供了相关记录,但是精确匹配记录不在最前面,我想出了如何根据特定字段来增强记录的方法,但是在我的情况下,我不想提供字段并进行搜索限制性的,ElasticSearch中是否有实现相同目的的选项。

2 个答案:

答案 0 :(得分:0)

您可能可以执行以下操作,但是在将其投入生产之前,请进行彻底的测试并测试多个场景。

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": "\"Karnataka Delhi\"",
                  "default_operator": "AND"
                }
              }
            ]
          }
        },
        {
          "query_string": {
            "query": "Karnataka Delhi",
            "default_operator": "OR",
            "boost": 2
          }
        },
        {
          "query_string": {
            "query": "Karnataka Delhi",
            "default_operator": "AND",
            "boost": 4
          }
        }
      ]
    }
  }
}

希望这会有所帮助!

答案 1 :(得分:0)

这对示例很有帮助,但是您可以通过添加双引号来使用phrase_match query。如果您对phrase_match查询进行了增强,则能够获得排名更高的完全匹配。

以下查询应执行您想要的操作。

GET /stories_qa/_search
{
  "query": {
    "query_string": {
      "query": "(\"Johnson && Johnson\")^2 OR (Johnson && Johnson)"
    }
  }
}