我们如何在elasticsearch中订购精确匹配

时间:2013-12-02 08:57:13

标签: elasticsearch

我正在搜索所有内容的关键字。如果我在搜索框中输入完整的帖子标题,它将显示在底部。正如我根据post_date订购我的帖子但是有任何办法 因此,大多数分数将显示在最顶层,我可以根据post_dateexact match合并此订单。

我正在使用以下查询: -

    {
       "query": {
          "bool": {
             "must": [
                {
                   "query_string": {
                      "query": "Post title keyword goes here.."
                   }
                },
                {
                   "term": {
                      "post_status": "publish"
                   }
                }
             ]
          }
       },
       "sort": [
          {
             "post_date": {
                "order": "desc"
             }
          }
       ],
       "from": 0,
       "size": 20
    }

3 个答案:

答案 0 :(得分:0)

我认为这将是对弹性搜索不支持的分组。但是,您可以操纵评分,然后根据评分对结果进行排序。有关如何更改评分的更多详细信息,请访问:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

答案 1 :(得分:0)

我们可以使用sort中的_score在顶部订购完全匹配。我需要改变我的JSON: -

   "sort": [
      "_score",
      {
         "post_date": {
            "order": "desc"
         }
      }
   ],

添加_score作为第一个字段。

答案 2 :(得分:0)

我相信这是关于你要找的东西:

{
  "query": {
    "custom_filters_score": {
      "query": {
        "bool": {
          "must": [
            {
              "query_string": {
                "query": "Post title keyword goes here.."
              }
            },
            {
              "term": {
                "post_status": "publish"
              }
            }
          ]
        }
      },
      "filters": [
        {
          "filter": {
            "exists": {
              "field": "post_date"
            }
          },
          "script": "doc['post_date'].date.getMillis() " /* calculate custom boost from date */ 
        },
        {
          "filter": {
            "query": {
              "query_string": {
                "query": "Post title keyword goes here..",
                "default_operator": "AND"
              }
            }
          },
          "boost": 100
        }
      ]
    }
  }
}