ElasticSearch查询字符串查询default_operator

时间:2016-10-11 01:47:31

标签: elasticsearch

以下查询查找包含所有单词的所有文档" look"," for"和"这个:

"query": {
            "query_string": {
                "query": "look for this",
                "default_operator":"AND"
          }
        }

虽然这个人找到任何这三个词中的任何一个文件:

"query": {
            "query_string": {
                "query": "look for this",
                "default_operator":"OR"
          }
        }

我的问题是如何更改查询以便执行Google样式搜索,即它首先列出所有包含所有条款的文档,然后列出包含其中任何条款的文档?

我将不胜感激。

1 个答案:

答案 0 :(得分:1)

默认情况下,弹性搜索会为所有条款都存在的文档提供更高的分数。您可以使用explain api来查看。

如果你真的想在所有条款都存在的情况下给出非常高分的文件,那么你可以使用bool query

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "default_field": "title",
            "query": "look for this",
            "default_operator": "AND"
          }
        },
        {
          "query_string": {
            "default_field": "title",
            "query": "look for this"
          }
        }
      ]
    }
  }
}

编辑1

您可以使用fuction score query来提升所需结果。请尝试以下查询

{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "query_string": {
                "fields": [
                  "title"
                ],
                "query": "look for this",
                "default_operator": "AND"
              }
            },
            {
              "query_string": {
                "query": "look for this",
                "fields": [
                  "title"
                ]
              }
            }
          ]
        }
      },
      "functions": [
        {
          "filter": {
            "query": {
              "query_string": {
                "fields": [
                  "title"
                ],
                "query": "look for this",
                "default_operator": "AND"
              }
            }
          },
          "weight": 10
        }
      ]
    }
  }
}