弹性搜索中的格式错误的查询

时间:2016-07-08 11:14:37

标签: elasticsearch

我需要在弹性搜索中编写一个非常复杂的查询。

查询存储在字符串query中,其目的是在字段titlecontent上进行“bool”匹配,但是要给予特殊权重诸如“java”或“python”之类的词。

我这样做的尝试是

{
    "fields": ["title","content","id"],
     "query": {
       "function_score": {
       "query":
         {
                "bool":
                {
                    "should":
                    [
                        {"match": {"title": {"query": query, "boost": 15}}},
                        {"match": {"content": {"query": query, "boost": 9}}}
                    ]
                }
            }
         },
         "functions": [
            {
            "filter": {
               "match": {
                 "title": "java"
            }},
            "weight": 2 },
            {
            "filter": {
               "match": {
                 "title": "python"
            }},
            "weight": 2 }
        ],
         "boost_mode": "multiply"
       }
} 

但是我收到一条错误消息,指出查询格式错误。如果这是一个天真的问题,我很抱歉,但我不知道还能在哪里转。

1 个答案:

答案 0 :(得分:0)

试试这个:

{
  "fields": [
    "title",
    "content",
    "id"
  ],
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "title": {
                  "query": query,
                  "boost": 15
                }
              }
            },
            {
              "match": {
                "content": {
                  "query": query,
                  "boost": 9
                }
              }
            }
          ]
        }
      },
      "functions": [
        {
          "filter": {
            "match": {
              "title": "java"
            }
          },
          "weight": 2
        },
        {
          "filter": {
            "match": {
              "title": "python"
            }
          },
          "weight": 2
        }
      ],
      "boost_mode": "multiply"
    }
  }
}